日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

linux的 计划任务机制,自己带节奏

發布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

以上過程同樣適用于腳本的執行,在指定時間執行腳本。

注意事項
  1. 計劃中的命令 有可能不在$PATH路徑變量中,添加計劃時最好加入絕對路徑

  2. 計劃任務at沒有終端,不支持標準輸出,所以計劃任務的輸出結果需要重定向到文件才能查看。

    at> echo hello >/tmp/hello.txt

4. 周期性計劃任務實現

croncrontab命令
  • 配置方式 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的 计划任务机制,自己带节奏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。