Close

Not a member yet? Register now and get started.

lock and key

Sign in to your account.

Account Login

Forgot your password?

Linux環境設定程式排程的技巧

若要在Linux主機上固定某個時間執行特定指令(例如備份或同步資料,重建資料庫索引等定期工作),通常藉助crond這個daemon來達成,您可以在/etc下找到數個cron開頭的目錄,直接在cron.daily、hourly、monthly、weekly等目錄下撰寫script,或者下「crontab -e」指令編寫排程,通常後者的方式比較直覺,也是比較建議的作法。 以下列舉編寫crontab時的一些小技巧,注意本文以Ubuntu作例子,也許會不適用於您的發行版。

  1. 「crontab -e」指令會開啟一個暫存的設定檔,讓你透過編寫檔案的方式去設定排程,第一次執行時會問你要使用的文字編輯器,日後可以用「select-editor」指令修改,或者設定「EDITOR」環境變數。
  2. 檔案的格式為「分 時 日 月 週 指令」,中間可用空白或Tab分隔。
    # 每天的1時23分執行
    23 1 * * * /usr/bin/somecommand.sh
    # 每5分鐘執行
    */5 * * * * /usr/bin/somecommand.sh
    # 每週一, 二的2時34分執行
    34 2 * * 1,2 /usr/bin/somecommand.sh
  3. 任何的檔案名稱盡量撰寫絕對路徑,尤其是執行檔,因為crond執行時的環境未必與目前的操作環境相同,設定絕對路徑可減少「執行到其他路徑下同名檔案」的風險,例如寫「/usr/bin/php」會比「php」好。
  4. crond執行任何排程指令時,會將執行時輸出的結果以電子郵件型式寄給主機上設定此排程工作的帳號,可以用mail或mutt等工具查閱,或者架設POP3伺服器再用Email收信軟體收取這些郵件。若您的環境有特殊考量,不適合架設郵件伺服器的話,您還可以用其他方式去取得指令的輸出結果,例如用「>」符號將結果輸出至檔案等等。若是您自己編寫的程式,則可以在程式裡預先寫好輸出結果的動作。
  5. 執行「crontab -e」時的身份會是未來執行排程指令的身份,若您要設定其他帳號的排程工作,可以先「su」成該帳號再設定,或者直接鍵入「sudo crontab -u 帳號名稱 -e」去設定。
  6. 若您是直接到/etc/cron.d等目錄下直接編寫排程指令設定檔,要注意的是這裡的檔案格式與「crontab -e」採用的不同,是「分 時 日 月 週 帳號名稱 指令」,以下為範例:
    # 每5分鐘用 root 執行
    */5 * * * * root /sbin/testcommand

Leave a Reply

*