[Linux] Crontab 排程使用教學 – 參數速查

在linux系統中,如 freebsd,cron 排程的資料是存在/etc/crontab中,我們可以直接輸入 vi /etc/crontab進行編輯。

Linux Cron 指令

  • crontab -e 編輯排程 (edit cron)
  • crontab -r  移除排程 (remove cron)
  • crontab -l  顯示目前排程 (list cron)crontab -u 改變排程的執行身分: crontab -u user filename

Cron 語法介紹

分鐘 小時 星期 執行身份 指令
0~59 0~23 1~31 (29,30) 1~12 0~6
0是星期日,6是星期六
帳號 /usr/bin/xxxx

Cron 範例 ( Example )

每5分鐘執行一次

 */5 * * * *  root    /usr/libexec/atrun

每5小時執行一次

 * */5 * * * root    /usr/libexec/atrun

1至20號每天執行一次

0 1 1-20  * * root    /usr/libexec/atrun

當分針移到第5分時,執行此 cron

 5 * * * * root    /usr/libexec/atrun

當時針移到1點 1 分時,執行此 cron

1 1 * * * root    /usr/libexec/atrun

每週一的1點1分,執行

1 1 * * 1 root    /usr/libexec/atrun

2月29日時針到1點1分,執行 

1 1 29 2 * root    /usr/libexec/atrun

8點到16點每5分鐘執行一次 cron

 */5 8-16 * * *   root    /usr/libexec/atrun

Redirect Output

需要做轉導輸出時加至後方,範例為輸出至空(/dev/null):

*/5 8-16 * * * root /usr/libexec/atrun > /dev/null

start cron

在 Linux 中,有個程式叫 crond ,意思是 cron daemon,大部分的 Linux 系統都會自動背景啟開這個程式,但是有時候會碰到 cron 沒有啟動的狀態,啟動方式如下:

sudo service crond start

啟動之後,我會使用 tail -f /var/log/cron 這個指令來檢查 /etc/crontab 中的程式,是否有正確的被執行。

如何讓 cron job 自動 SCP 備份資料

首先我們要啟用 SSH Agent,有了 SSH Agent ,就能夠執行 scp 指令,並且自動通過輸入密碼的過程。

先在個人目錄下新增 .bash_profile ,並加入以下的內容,加入完成後得重新載入 .bash_profile , 使用指令「source ~/.bash_profile」,之後我們就可以用 start_agent 啟動 SSH Agent。

.bash_profile
  1. SSH_ENV=$HOME/.ssh/environment
  2. function start_agent {
  3. echo "Initialising new SSH agent..."
  4. /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
  5. echo succeeded
  6. chmod 600 ${SSH_ENV}
  7. . ${SSH_ENV} > /dev/null
  8. ssh-add id_rsa
  9. }

接下來修改 /etc/crontab ,將備份的指令輸入就可以了,如果想看執行的 Log ,可以在指令的最後補上 「 2>&1 > ~/cronLog」,這樣程式就會將結果存到 ~/cronLog。

/etc/crontab auto scp
  1. 1 1 * * * userxx . /home/userxx/.ssh/environment && /usr/bin/scp puritys.me:~/var/backup/* ~/
  2.  

這個範例是每天自動備份另一台機器的資料,但是時間一久 ,備份的資料會越來越多,最後硬碟會撐不住,所以又要加一個自動刪除舊檔的 cron job,下面這個範例會自動刪除五天前的 gz 備份檔。

/etc/crontab auto rm
  1. 40 1 * * * userxx /usr/bin/rm `date --date="-5 day" +"\%Y-\%m-\%d"`*.gz
  2.  

This post was refered by 

Leave a Reply

Your email address will not be published. Required fields are marked *