在Linux中能實現計劃任務的主要有三個,分別是at,batch,crongit
at命令用於執行一次性計劃任務,使用/etc/at.allow(白名單)、/etc/at.deny(黑名單)控制容許那些用戶使用at命令,若是兩個文件都不存在則只有root用戶能使用。
centos7默認存在/etc/at.deny文件,此文件爲空,表示全部用戶可用at任務.
vim
使用格式: 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 centos
使用mail/mailx命令輸入相應的編號便可查看.bash
與at同樣,是一次性任務,其不須要指定時間,當系統空閒時自動執行命令.不多使用.
用法:
batch 執行回車,進入交互式界面,按ctrl+d提交任務
ide
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
配置文件格式:centos7
系統任務 /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分鐘運行一次)code
示例 創建系統任務: [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