linux的 计划任务机制,自己带节奏
生活随笔
收集整理的這篇文章主要介紹了
linux的 计划任务机制,自己带节奏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 解決問題
- 2. 計劃任務分類
- 3. 一次性計劃任務實現
- 添加計劃步驟
- 注意事項
- 4. 周期性計劃任務實現
- `cron`和`crontab`命令
- 5. 延時計劃任務
- 6. `flock`腳本加鎖,保證單實例運行
1. 解決問題
環境中有腳本需求,周期性運行或者固定時間運行腳本,為了保證腳本的正常運行以及不會有沖突,可以增加計劃任務來保證腳本在指定時間,正常順利運行。
2. 計劃任務分類
- 一次性計劃任務
- 周期性計劃任務
- 為腳本加鎖
3. 一次性計劃任務實現
添加計劃步驟
核心命令at,可以通過man at查看具體詳細用法
運行方式如下:
[root@node1 design_partten]$ date #獲取系統時間
Fri Apr 17 17:13:21 CST 2020
[root@node1 design_partten]$ at 17:15 #在17:35 分執行如下命令
at> echo hello >/tmp/hello.txt
at> <EOT> #按 ctrl+d 提交計劃
job 3 at Fri Apr 17 17:15:00 2020
[root@node1 design_partten]$ atq #查看系統已有計劃列表
3 Fri Apr 17 17:15:00 2020 a root
...[root@node1 design_partten]$ date
Fri Apr 17 17:15:08 CST 2020
[root@node1 design_partten]$ cat /tmp/hello.txt #查看文件內容
hello
[root@node1 design_partten]$ ls -l /tmp/hello.txt #查看文件創建時間
-rw-r--r-- 1 root root 6 Apr 17 17:15 /tmp/hello.txt
以上過程同樣適用于腳本的執行,在指定時間執行腳本。
注意事項
-
計劃中的命令 有可能不在
$PATH路徑變量中,添加計劃時最好加入絕對路徑 -
計劃任務
at沒有終端,不支持標準輸出,所以計劃任務的輸出結果需要重定向到文件才能查看。at> echo hello >/tmp/hello.txt
4. 周期性計劃任務實現
cron和crontab命令
-
配置方式
crontab -e,最小運行單位為分鐘 -
查看現有的計劃任務
crontab -l -
配置格式
分鐘 小時 日期 月份 星期 執行的命令注意命令的路徑問題($PATH)
具體配置步驟如下:
$crontab -e
#輸入如下命令,表示任意時間就執行一次date命令,并將結果重定向到/tmp/data.txt
* * * * * /usr/bin/date >> /tmp/data.txt#通過tail -f /var/log/cron 查看針對crontab 的編輯操作
$tail -f /var/log/cron
Apr 17 17:39:04 node1 crontab[67309]: (root) REPLACE (root)
Apr 17 17:39:04 node1 crontab[67309]: (root) END EDIT (root)
Apr 17 17:39:23 node1 crontab[86411]: (root) BEGIN EDIT (root)
Apr 17 17:39:45 node1 crontab[86411]: (root) REPLACE (root)
Apr 17 17:39:45 node1 crontab[86411]: (root) END EDIT (root)
Apr 17 17:40:01 node1 CROND[96072]: (root) CMD (/usr/bin/date >> /tmp/data.txt)#查看執行結果
$cat /tmp/data.txt
Fri Apr 17 17:40:01 CST 2020
Fri Apr 17 17:41:01 CST 2020
Fri Apr 17 17:42:01 CST 2020
Fri Apr 17 17:43:01 CST 2020$crontab -e
#周一到周五 ,每隔1分鐘運行一次,不管月份和星期,則運行一次命令
* * * * 1-5 /usr/bin/date >> /tmp/data.txt
#7月7日,且這一天是周一到周五,則運行一次命令
* * 7 7 1-5 /usr/bin/date >> /tmp/data.txt
#每月15號 3.00整執行該命令
0 3 15 * * * /usr/bin/date >> /tmp/data.txt
5. 延時計劃任務
當出現異常的時候:計劃任務執行前2分鐘操作系統關機,周期性計劃任務就沒辦法執行。
此時推出延時計劃任務:anacontab
編輯/etc/cron.d/0hourly查看內容如下:
# Run the hourly jobs,每小時的第一分鐘運行一次
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
#通過run-parts腳本,調用/etc/cron.hourly ,并在一個位置增加一個標記表示當前這一小時已經運行了。如果沒有運行,則可以運行。
01 * * * * root run-parts /etc/cron.hourly
編輯/etc/anacrontab
# /etc/anacrontab: configuration file for anacron# See anacron(8) and anacrontab(5) for details.SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
# 隨機的延時,數字0-45之間,選取任意一個數字用做延時的時間
RANDOM_DELAY=45
# the jobs will be started during the following hours only
# 延時計劃任務啟動時間,數字在3-22點之間任選一個 數字運行
START_HOURS_RANGE=3-22#period in days delay in minutes job-identifier command
#優先級是1,表示每天都運行,5表示延時時間。則運行時間范圍是3:05-3:55(加入取的延時計劃啟動時間選取的是3點)
1 5 cron.daily nice run-parts /etc/cron.daily #每天運行的任務
7 25 cron.weekly nice run-parts /etc/cron.weekly #每周運行的任務
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly #每月運行的任務
6. flock腳本加鎖,保證單實例運行
案例a.sh
#!/bin/bashsleep 3600
為了保證以上a.sh同一時間只運行一個,則可以使用flock增加排他鎖
flock -xn "/tmp/f.lock" -c "/root/a.sh"
...
以上命令在第二個終端運行的時候則無法正常運行
flock -xn "/tmp/f.lock" -c "/root/a.sh"
總結
以上是生活随笔為你收集整理的linux的 计划任务机制,自己带节奏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 试管婴儿什么时候合适
- 下一篇: shell --- awk规范 系统总结