Linux計劃任務

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