在Linux中能實現計劃任務的主要有三個,分別是at,batch,cron
at
at命令用於執行一次性計劃任務,使用/etc/at.allow(白名單)、/etc/at.deny(黑名單)控制允許那些用戶使用at命令,如果兩個文件都不存在則只有root用戶能使用。
centos7默認存在/etc/at.deny文件,此文件爲空,表示所有用戶可用at任務.
使用格式:
at [option] time
-m at的工作完成後不管有沒有輸出,都用email通知使用者工作完成。
-l 類似於atq,列出at的任務列表
-d 類似於atrm,刪除at任務
-c # 列出id爲#的任務實際運行的工作指令
TIME格式:
HH:MM
HH:MM YYYY-MM-DD
HH:MM +* Unit[minutes、hour、day、weeks] #在某個時間再加個時間
例如 at now +5 minutes 五分鐘後執行任務
at now +5 minutes
echo "hello world" >/dev/pts/4 #輸出到終端
注意:at所有任務執行完後都將結果發送郵件給用戶,默認郵件存放地址爲/var/spool/mail/username
使用mail/mailx命令輸入相應的編號即可查看.
batch
與at一樣,是一次性任務,其不需要指定時間,當系統空閒時自動執行命令.很少使用.
用法:
batch 執行回車,進入交互式界面,按ctrl+d提交任務
crontab
crontab,用於提供週期性計劃任務
相關程序包:
cronie 主程序包,提供crond
cronie-anacron 輔助程序包,用於監視crond是否正確執行, 例如,當執行任務時系統關機了,crond無法執行任務,當系統啓動後被anacron監測到crond執行失敗,則立即執行一遍任務.
crontabs 提供維護工具
[root@localhost ~]# rpm -qa | grep cron
cronie-1.4.11-14.el7_2.1.x86_64
crontabs-1.11-6.20121102git.el7.noarch
cronie-anacron-1.4.11-14.el7_2.1.x86_64
相關文件:
/etc/cron.allow 運行執行crond的用戶列表
/etc/cron.deny 拒絕執行crond的用戶列表
/etc/crontab 系統任務文件
/etc/cron.d/ 系統任務文件夾
計劃任務:
系統cron任務,通常用於執行系統維護操作 /etc/crontab /etc/cron.d/*
用戶cron任務,通常用於用戶操作任務 /var/spool/cron/user_name
配置文件格式:
系統任務 /etc/crontab
* * * * * user-name command
用戶任務 /var/spool/cron/user_name
* * * * * command #區別在於不用指定用戶
*分別代表 minutes, hour ,day of mouth, month, day of week
時間表示方法:
1)具體時間,一個特定的值
2) ,表示所有值,每時每刻都執行任務
3)離散取值,逗號分隔 “#,#”
4)連續取值,短減號分隔 “#-#”
5)在指定的範圍上指定步長, “/3” (每3分鐘運行一次) , “20-50/3” (在20-50分鐘內每隔3分鐘運行一次)
示例
建立系統任務:
[root@localhost cron.d]# vim /etc/crontab
* */3 * * * gentoo /bin/bash wall <123.txt
0 */3 * * * gentoo /bin/bash wall <123.txt
第一個是錯誤示例,當大範圍爲*時,小範圍要給具體值
建立用戶任務:
root用戶下爲別的用戶建立用戶任務: (只有root能爲別的用戶建任務)
[root@localhost ~]# crontab -u gentoo
普通用戶自己建立用戶任務:
[hurn@localhost ~]# crontab -e
默認情況下,crond執行的所有命令輸出都將以郵件方式發送給相應的用戶,如果不想發到郵箱則需要使用重定向:
command >/dev/null 正確的扔掉,錯誤的發送郵件
command &>/dev/null 所有的都扔掉
當用戶要實現秒級別的任務或則不能被相應*的取值範圍整除的數,則可以通過sleep命令實現.
sleep # (smhd) s秒,m分,h時,d天
例如實現每3秒執行一次ps命令:
* * * * * sleep 3s ; ps
例如每7分鐘執行一次ps命令:
(分鐘的取值範圍爲1-60,不能被7整除,實際上最後一輪並沒有執行)
* * * * * sleep 7m ; ps