Linux學習之計劃任務(at、batch、crontab)篇

Linux學習之任務計劃(at、batch、crontab)篇


一、linux上的任務計劃

  1、分類

      linux上的任務計劃可以分爲兩類:

      a、週期性執行的任務計劃

           crontab

      b、後續時間一次性執行的計劃

           at、batch

  2、電子郵件服務

     電子郵件服務使用到的幾個協議:

      smtp:simple mail transmission protocol

      pop3:post office protocol

      imap4:internet mail access protocol

        沒個用戶的都有一個專門存放郵件的地方:

        /var/spool/mail/USERNAME

[root@pizi mail]# ll
總用量 12
-rw-rw----. 1   3001 mail    0 9月   1 23:33 123user
-rw-r--r--. 1 root   root   11 9月   5 15:40 at.list
-rw-rw----. 1 hadoop mail    0 9月   5 11:01 hadoop
-rw-rw----. 1    600 mail    0 8月  27 00:40 piziuser
-rw-------. 1 root   mail 4773 9月   5 17:02 root
-rw-rw----. 1 rpc    mail    0 8月  24 23:03 rpc
-rw-rw----. 1 usera  mail    0 9月   4 20:23 usera
-rw-rw----. 1 userb  mail    0 9月   4 20:58 userb
-rw-rw----. 1 userc  mail    0 9月   4 20:58 userc
[root@pizi mail]#

      

   mail命令:

      mail:進入交互式收發郵件接口;

[root@pizi mail]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 5 messages
>   1 Mail Delivery System  Sat Sep  5 15:22  75/2399  "Undelivered Mail Retu"
    2 [email protected]  Sat Sep  5 15:23  19/557   "hi"
    3 root                  Sat Sep  5 15:29  37/565   "Output from your job "
    4 root                  Sat Sep  5 15:44  15/544   "Output from your job "
    5 Cron Daemon           Sat Sep  5 16:30  23/708   "Cron <root@pizi> /bin"
&


      mail -s 'SUBJECT' username@hostname

[root@pizi mail]# mail -s 'test mail' [email protected]
this is test mail
EOT
[root@pizi mail]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 10 messages 1 new
    1 Mail Delivery System  Sat Sep  5 15:22  75/2399  "Undelivered Mail Retu"
    2 [email protected]  Sat Sep  5 15:23  19/557   "hi"
    3 root                  Sat Sep  5 15:29  37/565   "Output from your job "
    4 root                  Sat Sep  5 15:44  15/544   "Output from your job "
    5 Cron Daemon           Sat Sep  5 16:30  23/708   "Cron <root@pizi> /bin"
    6 Mail Delivery System  Tue Sep  8 22:33  75/2402  "Undelivered Mail Retu"
    7 [email protected]  Tue Sep  8 22:34  19/567   "hi"
    8 [email protected]  Tue Sep  8 22:34  19/567   "hi"
    9 Mail Delivery System  Tue Sep  8 22:35  74/2324  "Undelivered Mail Retu"
>N 10 root                  Tue Sep  8 22:37  18/580   "test mail"
&

   mail -s 'SUBJECT' username@hostname < /path/from/somefile

[root@pizi mail]# cat /tmp/testmail.txt
this is a test mail txt file!
[root@pizi mail]# mail -s 'txt' [email protected] < /tmp/testmail.txt
[root@pizi mail]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 11 messages 1 new 2 unread
    1 Mail Delivery System  Sat Sep  5 15:22  75/2399  "Undelivered Mail Retu"
    2 [email protected]  Sat Sep  5 15:23  19/557   "hi"
    3 root                  Sat Sep  5 15:29  37/565   "Output from your job "
    4 root                  Sat Sep  5 15:44  15/544   "Output from your job "
    5 Cron Daemon           Sat Sep  5 16:30  23/708   "Cron <root@pizi> /bin"
    6 Mail Delivery System  Tue Sep  8 22:33  75/2402  "Undelivered Mail Retu"
    7 [email protected]  Tue Sep  8 22:34  19/567   "hi"
    8 [email protected]  Tue Sep  8 22:34  19/567   "hi"
    9 Mail Delivery System  Tue Sep  8 22:35  74/2324  "Undelivered Mail Retu"
 U 10 root                  Tue Sep  8 22:37  19/590   "test mail"
>N 11 root                  Tue Sep  8 22:41  18/586   "txt"
&
& 11
Message 11:
From [email protected]  Tue Sep  8 22:41:32 2015
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Date: Tue, 08 Sep 2015 22:41:32 +0800
To: [email protected]
Subject: txt
User-Agent: Heirloom mailx 12.4 7/29/08
Content-Type: text/plain; charset=us-ascii
From: [email protected] (root)
Status: R

this is a test mail txt file!

&


  COMMAND | mail -s 'SUBJECT' username@hostname

[root@pizi mail]# ifconfig | mail -s 'ifconfig' [email protected]
[root@pizi mail]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 12 messages 1 new 2 unread
    1 Mail Delivery System  Sat Sep  5 15:22  75/2399  "Undelivered Mail Retu"
    2 [email protected]  Sat Sep  5 15:23  19/557   "hi"
    3 root                  Sat Sep  5 15:29  37/565   "Output from your job "
    4 root                  Sat Sep  5 15:44  15/544   "Output from your job "
    5 Cron Daemon           Sat Sep  5 16:30  23/708   "Cron <root@pizi> /bin"
    6 Mail Delivery System  Tue Sep  8 22:33  75/2402  "Undelivered Mail Retu"
    7 [email protected]  Tue Sep  8 22:34  19/567   "hi"
    8 [email protected]  Tue Sep  8 22:34  19/567   "hi"
    9 Mail Delivery System  Tue Sep  8 22:35  74/2324  "Undelivered Mail Retu"
 U 10 root                  Tue Sep  8 22:37  19/590   "test mail"
   11 root                  Tue Sep  8 22:41  19/597   "txt"
>N 12 root                  Tue Sep  8 22:42  35/1448  "ifconfig"
& 12
Message 12:
From [email protected]  Tue Sep  8 22:42:58 2015
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Date: Tue, 08 Sep 2015 22:42:57 +0800
To: [email protected]
Subject: ifconfig
User-Agent: Heirloom mailx 12.4 7/29/08
Content-Type: text/plain; charset=us-ascii
From: [email protected] (root)
Status: R

eth0      Link encap:Ethernet  HWaddr 08:00:27:A1:56:BC
          inet addr:192.168.3.8  Bcast:192.168.3.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fea1:56bc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1398 errors:0 dropped:0 overruns:0 frame:0
          TX packets:975 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:135985 (132.7 KiB)  TX bytes:129159 (126.1 KiB)


 3、at命令

    at命令是承載未來時間運行的某作業:

    支持使用作業隊列:

     默認爲a隊列;

    

    使用方法:

     at [option]... TIME

       [option]選項

        -q QUEUE :at的作業隊列;

        -f /path/from/somefile:從指定的文件中讀取要運行的作業;

        -l:查看作業隊列中德等待運行的作業,相當於使用atq命令;

        -c AT JOB_NUM:查看待運行作業的內容

        -d:刪除指定作業;


       TIME時間

         a、絕對時間:

            HH:MM,MMDD[CC]YY,MM/DD/[CC]/YY

         b、相對時間:

             now+#unit

                unit:minute,hour,day,week

         c、模糊時間:

             midnight、noon、teatime

[root@pizi mail]# at now+1minute
at> ls /
at> <EOT>
job 4 at 2015-09-08 22:52
[root@pizi mail]# at -l
4       2015-09-08 22:52 a root

[root@pizi mail]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 13 messages 1 new 2 unread
    1 Mail Delivery System  Sat Sep  5 15:22  75/2399  "Undelivered Mail Returned to Sender"
    2 [email protected]  Sat Sep  5 15:23  19/557   "hi"
    3 root                  Sat Sep  5 15:29  37/565   "Output from your job        2"
    4 root                  Sat Sep  5 15:44  15/544   "Output from your job        3"
    5 Cron Daemon           Sat Sep  5 16:30  23/708   "Cron <root@pizi> /bin/echo "hello""
    6 Mail Delivery System  Tue Sep  8 22:33  75/2402  "Undelivered Mail Returned to Sender"
    7 [email protected]  Tue Sep  8 22:34  19/567   "hi"
    8 [email protected]  Tue Sep  8 22:34  19/567   "hi"
    9 Mail Delivery System  Tue Sep  8 22:35  74/2324  "Undelivered Mail Returned to Sender"
 U 10 root                  Tue Sep  8 22:37  19/590   "test mail"
   11 root                  Tue Sep  8 22:41  19/597   "txt"
   12 root                  Tue Sep  8 22:42  36/1459  "ifconfig"
>N 13 root                  Tue Sep  8 22:52  36/554   "Output from your job        4"
& 13
Message 13:
From [email protected]  Tue Sep  8 22:52:03 2015
Return-Path: <[email protected]>
X-Original-To: root
Delivered-To: [email protected]
Subject: Output from your job        4
To: [email protected]
Date: Tue,  8 Sep 2015 22:52:03 +0800 (CST)
From: [email protected] (root)
Status: R

bin
boot
dev
etc
home
lib
lib64
lost+found
media
misc
mnt
net
opt
proc
root
sbin
selinux
srv
sys
test
tmp
usr
var


 4、batch:

     由系統自行選擇在資源較爲空閒時運行指定的任務:

 

 5、crontab:週期性的任務計劃

    其守護進程爲crond

 

     週期性任務計劃分爲兩類:

      a、系統cron任務:沒有默認運行用戶身份,所以需要額外指定運行者;

 

        # 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) 

# |  |  |  |  |

# *  *  *  *  * user-name  command to be executed

 

   系統性cron任務由7個字段組成:

    前5個字段:時間點

    user-name:計劃時間點以哪個用戶運行程序;

    command to be executed:要運行的任務;


   時間表示法:

    *,表示該時間字段取值範圍內的所有值

    -:一個特定連續時間範圍;3-7

    ,:一個離散的時間點,1,3,4,5

    /#:有限時間範圍內的每多少時間,用於指定頻率;


   注意:day of month ,month 兩個時間點一般不與day of week同時使用


   例:

   

    [root@pizi mail]# crontab -l
     5 */3 * * * root /bin/echo "hello world!"

         表示每3個小時的第5分鐘執行一次echo "hello world"命令


  b、用戶cron任務:由某個用戶所提交,默認就是以提交者的身份運行,無需額外執行運行者:


 

        # 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) 

# |  |  |  |  |

# *  *  *  *  *  command to be executed

    此處的模式跟系統cron任務唯一不同的是此處不用指定運行用戶了。其他都同上


  c、crontab命令的用法:

     crontab [-u user] [-l|-r|-e]

       -u user:不是管理自己的cron任務,而是指定的目標用戶的cron任務,僅root擁有管理其他用戶的cron任務的權限,默認管理自己的;

       -l:list 列出任務;

       -r:remove,移除所有任務;

       -e:edit,編輯,打開一當前shell回話的默認編輯器來編輯cron任務表;


  d、注意:

    1)、如果不想接收任務執行結果的通知郵件:

       command > /dev/null :表示不接收執行任務正確的郵件通知

       command &> /dev/null :表示不接收所有的郵件通知

    2)、對於crontab文件來講,%有特殊的功用,如果命令中出現了%,要記得轉義,或者用單引號對其引用;

    3)、crondtab的path變量與用戶的變量不完全相同,所以建議在cron中的任務要使用絕對路徑來執行


二、練習:

1、每週一到週六的凌晨3點20分,運行cp命令對/etc/目錄進行歸檔另存,存儲位置爲/backups/etc-YYYY-MM-DD; 

[root@pizi backups]# crontab -l
20 3 * * 1-6 /bin/cp -af /etc/ /backups/etc-$(date +\%F)


2、每週日凌晨2點30分,運行cp命令對/etc/fstab文件進行備份,存儲位置爲/backup/fstab-YYYY-MM-DD-hh-mm-ss

[root@pizi backups]# crontab -l
20 3 * * 1-6 /bin/cp -af /etc/ /backups/etc-$(date +\%F)
30 2 * * 0 /bin/cp -af /etc/fstab /backups/fstab-$(date +\%F-\%H-\%M-\%S)


3、每天晚上12點,取得/proc/meminfo文件中所有以S或M開頭的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上類似===============分隔線;

[root@pizi statistics]# crontab -l
20 3 * * 1-6 /bin/cp -af /etc/ /backups/etc-$(date +\%F)
30 2 * * 0 /bin/cp -af /etc/fstab /backups/fstab-$(date +\%F-\%H-\%M-\%S)
0 23 * * * (/bin/echo "============";/bin/egrep "^(S|M)" /proc/meminfo) >> /statistics/meminfo.txt


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