Linux中的crontab定時執行任務命令

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:是針對系統所有用戶生效的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章