Linux下如何定時執行任務腳本?
服務器日常運行過程中,我們經常會碰到有些工作是定時要執行的,比如數據庫的備份、日志的切割等等,這些都需要每天、每周或者每月等定制操作。在linux下通過cronttab可以輕松的實現這個需求。
首先我們看一下cronttab命令各個參數的含義
cronttab所擁有的參數如下:
crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]
crontab -n [ hostname ]
crontab -c
crontab –V
-u 後面跟用戶名,
-l 顯示當前的cronttab信息
-r 删除當前cronttab信息
-e 編輯cronttab信息
-I 添加這個選項後,在使用-r參數删除cronttab信息的時候,會出現确認選項,可以輸入y/n
-s 在編輯和替換發生的時候,修改SELinux的MLS_LEVEL參數
-n 當cront命令啟動的時候使用了-c選項,這裡加上-n用來啟動集群的支持
-V 打印出版本信息
在配置cronttab的時候還有以下個文件需要注意
/etc/cron.allow
/etc/cron.deny
在運行定時任務的時候,在以上兩個文件裡面添加不同的用戶可以允許或者禁止某些用戶的操作,
如果cron.allow存在,那麼需要有此執行權限的用戶名必須存在于這個文件中
如果cron.allow不存在但是cron.deny存在,如果用戶需要有cront權限,那麼這個用戶名就不能存在于cron.deny文件中
如果這兩個文件都不存在,隻有超級用戶可以使用cron命令
還有一種就是使用PAM認證
下面我們來看具體的配置
這個文件
第一行:指明了使用的是哪個shell
第二行:bin文件的路徑
第三行:郵件的發送對象
重點是最後一行
這一行首先是個#,這是注釋,就不用解釋了
#号後面緊跟5個*
第一個* 是分鐘(0-59),也就是幾點幾分的分
第二個* 是小時(0-24),也就是幾點鐘
第三個* 是一個月當中的第幾天(1-31),也就是幾号
第四個* 是月份*(1-12),或者是寫jan,feb,mar,apr等
第五個* 是星期幾(0-6),(星期天是0或者7),也可以用sun,mon,tue,wed,thu,fri,sat
以上的*表示的是取所有值
還有”,”可以用來隔開特定的取值,比如”1,3,5,6”
“-”這個橫杠表示取值的範圍,比如”2-6”表示為”2,3,4,5,6”
“/”這個斜線表示間隔頻率,比如第一個位置用 “*/2”就表示每2分鐘執行一次,在天的那個位置”*/2”就表示每2天執行一次。
星号的後面就是 用戶名和所執行的命令
具體demo
編輯命令的時候可以用
[root@kailecloud ~]# crontab –e
也可以直接編輯cronttab文件(不建議)
[root@kailecloud ~]# vi /etc/crontab
1、 root用戶每天早上7:02執行一次備份腳本
02 07 * * * root /root/.sh/bak.sh
2、 mysql用戶每天1:02,7:02,12:02,19:02,23:02執行一次備份腳本
02 01,07,12,19,23 * * * mysql /var/.sh/bak.sh
3、 root用戶每周一早上2:00執行一次備份腳本發一封郵件
02 07 * * 1 root /root/.sh/bak.sh
4、 root用戶每個月的3号中午12:00執行一次備份腳本
00 12 3 * * root /root/.sh/bak.sh
其他常用命令
[root@kailecloud ~]# systemctl start crond.service
[root@kailecloud ~]# systemctl stop crond.service
[root@kailecloud ~]# systemctl restart crond.service
[root@kailecloud ~]# systemctl reload crond.service
[root@kailecloud ~]# systemctl status crond.service
[root@kailecloud ~]# systemctl enable crond.service
[root@kailecloud ~]# systemctl disable crond.service
原創内容,如有寫的不到位的地方,歡迎指正!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!