1、crontab介紹
在LINUX中,週期執行的任務一般由cron這個守護進程來處理ps -ef|grep cron
。cron讀取一個或多個配置文件,這些配置文件中包含了命令行及其調用時間
cron的配置文件稱爲“crontab”,是“cron table”的簡寫
單個用戶的計劃任務 | 系統級別的計劃任務 |
---|---|
單個用戶生效(單一一次,週期執行) | 所有用戶都去執行(大多數是週期性執行) |
2、單一一次執行
at now + 2 minutes 或者 at 10:23 月 日 年
>輸入要執行的命令
>CTRL+d 輸入結束
查看:
atq :查看設置的任務計劃,執行後就不會顯示了
/var/apool/at
:當計劃任務沒有執行會在該目錄下產生一個普通文件,但是執行後該文件也就不存在了
刪除:
atrm 或者 刪除/var/spool/at/
下的執行計劃
一分鐘後廣播: hello kugou!!
[root@localhost ~]# at now + 1 minutes
at> wall hello kugou!! #wall 廣播
at> <EOT> #CTRL+D 結束任務
job 2 at Tue Aug 20 10:07:00 2019
[root@localhost ~]# atq #查看執行任務
2 Tue Aug 20 10:07:00 2019 a root
[root@localhost ~]# cd /var/spool/at/ #查看執行任務
[root@localhost at]# ll
total 4
-rwx------. 1 root root 3461 Aug 20 10:06 a00002018e527f
drwx------. 2 root root 6 Aug 20 10:04 spool
[root@localhost at]#
Broadcast message from [email protected] (Tue Aug 20 10:07:01 2019):
hello kugou!!
3、週期性執行計劃任務
創建cron表,通過命令crontab -e
來創建
* * * * * user-name command to be executed
* * * * * 分 時 日 月 周(五個*號作用)
minute:表示分鐘,可以從0 -- 59 之間任何整數。 */1每隔一分鐘執行一次
hour:表示小時,可以從0 -- 23 之間的任何數字
day:表示日期,可以從1 -- 31 之間的任何整數
mouth:表示月份,從1 -- 12之間任何整數
week:表示星期幾,可以從0 -- 7 之間的任何整數 0 == 7(周天)
command:要執行的命令,可以是系統命令,也可以時自己編寫的腳本
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l -u root
06 14 * * 03 wall hello kugou!!
[root@localhost ~]# cd /var/spool/cron/
[root@localhost cron]# ll
total 4
-rw-------. 1 root root 32 Aug 20 10:15 root
crontab -e
(-u user 不寫就是當前用戶)
查看:crontab -l
按條刪除:crontab -e
進入執行表中刪除某條
刪除全部: 刪除/var/spool/cron/
文件、crontab -r
清除我的所有計劃任務列表
[root@localhost ~]# vim /etc/crontab
SHELL=/bin/bash #命令解釋器
sbin:/bin:/usr/sbin:/usr/bin #腳本所執行的對應的命令的路徑
MAILTO=root #郵件信息給root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
4、特殊情況
未正常執行任務(斷電或其他情況),在開機後檢查 計劃任務,那些沒有執行,然後在指定時間內去執行
[root@localhost cron]# vim /etc/anacrontab
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily #每天的任務:開機後檢查是否執行過,未執行則在5分鐘內執行
7 25 cron.weekly nice run-parts /etc/cron.weekly #每週的任務:開機後檢查7天內是否執行過,未執行則在25分鐘內執行
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly #每月的任務:開機後檢查1個月內是否執行過,未執行則在45分鐘內執行
~
當我們同一時刻執行多個腳本 run-parts
,可以執行一個目錄下的所有腳本或程序usr/bin/run-parts
將shell腳本放置在此目錄下
5、拒絕執行
拒絕某個用戶執行單一一次的任務計劃:
[root@localhost cron]# vim /etc/at.deny
redhat
[redhat@localhost ~]$ at now + 1 minutes
You do not have permission to use at.
拒絕某個用戶執行週期的任務計劃:
[root@localhost cron]# vim /etc/cron.deny
[redhat@localhost ~]$ crontab -e
You (redhat) are not allowed to use this program (crontab)
See crontab(1) for more information
配置crontab -e 和 /etc/crontab的區別:
crontab -e
:是當前用戶定義的,只對當前用戶生效
/etc/crontab
:是針對系統所有用戶生效的