如何在linux中在指定的時間運行自定義命令
不知道大家有沒有這樣類似的經歷,使用諸如rsync將一個大文件傳輸到局域網的另一個系統。 由于文件比較大,耗費的時間可能達到小時級別。這時我們可能就會想能不能在飯空或者休息時間來傳輸這個文件,這樣就出現了我們的定時任務。
方法1:timeout命令
最常見的方法是使用timeout命令來實現此目的。
timeout命令是GNU coreutils包的一部分,預先安裝在所有GNU / Linux系統中。
man timeout
如上圖man timeout信息所示:
格式:
timeout [OPTION] NUMBER[SUFFIX] COMMAND [ARG]...
這里的SUFFIX:
s:秒
m:分鐘
h:小時
d:天
案例1:
5秒后執行tail -f /general/Tomcat-8.5-base/logs/catalina.out
timeout 5s tail -f /general/tomcat-8.5-base/logs/catalina.out
這里不是動態圖,大家可能看不出效果。
大家可以自己親自試一試。
方法2:Crontab定時任務
補充:
安裝命令:yum install crontabs。
這里我們僅做簡單的介紹和使用,關于crontab更加詳細的內容請參考:
Linux中Crontab定時任務簡單講解。
linux內置的cron進程也可以實現,cron搭配shell腳本,非常復雜指令也no問題。
(1)Cron介紹:
我們經常使用的是crontab命令是cron table的簡寫,它是cron的配置文件,也可以叫它作業列表,我們可以在以下文件夾內找到相關配置文件。
(2)配置文件:
/var/spool/cron/:
目錄下存放的是每個用戶包括root的crontab任務,每個任務以創建者的名字命名。
/etc/crontab:
這個文件負責調度各種管理和維護任務。
/etc/cron.d/:
這個目錄用來存放任何要執行的crontab文件或腳本。
補充:
我們還可以把腳本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目錄中,讓它每小時/天/星期、月執行一次。
(3) crontab的使用
格式:
crontab [-u username]
-e:編輯工作表
-l:列出工作表里的命令
-r:刪除工作
補充:
省略用戶表表示操作當前用戶的crontab。
(4)
我們用crontab -e進入當前用戶的工作表編輯,是常見的vim界面。
每行是一條命令。crontab的命令構成為時間+動作,其時間有分、時、日、月、周五種,操作符有:
*:取值范圍內的所有數字
/:每過多少個數字
-:從X到Z
,:散列數字
借用網上一張crontab格式說明圖:
以下的youCommand代表的是你自己定義的命令。
案例1:
每1分鐘執行一次
* * * * * youCommand
案例2:
每小時的第3和第15分鐘執行
3,15 * * * * youCommand
案例3:
在上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * * youCommand
案例4:
每隔兩天的上午8點到11點的第3和第15分鐘執行
3,15 8-11 */2 * * youCommand
案例5:
每周一上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * 1 youCommand
案例6:
每晚的21:30重啟smb
30 21 * * * /etc/init.d/smb restart
案例7:
每月1、10、22日的4 : 45重啟smb
45 4 1,10,22 * * /etc/init.d/smb restart
案例8:
每周六、周日的1 : 10重啟smb
10 1 * * 6,0 /etc/init.d/smb restart
案例9:
每天18 : 00至23 : 00之間每隔30分鐘重啟smb
0,30 18-23 * * * /etc/init.d/smb restart
案例10:
每星期六的晚上11 : 00 pm重啟smb
0 23 * * 6 /etc/init.d/smb restart
案例11:
每一小時重啟smb
* */1 * * * /etc/init.d/smb restart
案例12:
晚上11點到早上7點之間,每隔一小時重啟smb
* 23-7/1 * * * /etc/init.d/smb restart
關于crontab更加詳細的內容請參考:
Linux中Crontab定時任務詳解。
歡迎大家給予寶貴的意見或者建議。
歡迎大家補充或者共享一些其他的方法。
感謝支持。