今天做了個數據庫的備份腳本,順便系統得學習一下Linux下定時執行腳本的設置。Linux下的定時執行主要是使用crontab文件中加入定制計劃來執行,設置比Windows稍微復雜一些(因為沒有圖形界面嘛),但是也不是非常復雜,基本上用過一遍就能記住了,關鍵是要記住/var/spool/cron這個目錄。下面看一下具體的用法:
首先查看一下/etc/crontab文件:
$ cat /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# run-parts01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly
前四行是有關設置cron任務運行的環境變量。SHELL變量的值指定系統使用的SHELL環境(該樣例為bash shell),PATH變量定義了執行命令的路徑。Cron的輸出以電子郵件的形式發給MAILTO變量定義的用戶名。如果MAILTO變量定義為空字符串(MAILTO=""),電子郵件不會被發送。執行命令或腳本時HOME變量可用來設置基目錄。
文件/etc/crontab中每行任務的描述格式如下:
minute hour day month dayofweek commandminute - 從0到59的整數 hour - 從0到23的整數 day - 從1到31的整數 (必須是指定月份的有效日期) month - 從1到12的整數 (或如Jan或Feb簡寫的月份) dayofweek - 從0到7的整數,0或7用來描述周日 (或用Sun或Mon簡寫來表示) command - 需要執行的命令(可用as ls /proc >> /tmp/proc或 執行自定義腳本的命令) root表示以root用戶身份來運行 run-parts表示后面跟著的是一個文件夾,要執行的是該文件夾下的所有腳本
對于以上各語句,星號(*)表示所有可用的值。例如*在指代month時表示每月執行(需要符合其他限制條件)該命令。
整數間的連字號(-)表示整數列,例如1-4意思是整數1,2,3,4
指定數值由逗號分開。如:3,4,6,8表示這四個指定整數。
符號“/”指定步進設置。“/”表示步進值。如0-59/2定義每兩分鐘執行一次。步進值也可用星號表示。如*/3用來運行每三個月份運行指定任務。
以“#”開頭的為注釋行,不會被執行。
如果一個cron任務需要定期而不是按小時,天,周,月來執行,則需要添加/etc/cron.d目錄。這個目錄下的所有文件和文件/etc/crontab語法相同,查看樣例:
# record the memory usage of the system every monday # at 3:30AM in the file /tmp/meminfo 30 3 * * mon cat /proc/meminfo >> /tmp/meminfo # run custom scrīpt the first day of every month at 4:10AM 10 4 1 * * /root/scrīpts/backup.sh
除了root用戶之外的用戶可以執行crontab配置計劃任務。所有用戶定義的crontab存儲在目錄/var/spool/cron下,任務會以創建者的身份被執行。要以特定用戶創建一個crontab,先以該用戶登錄,執行命令crontab -e,系統會啟動在VISUAL或者EDITOR中指定的的編輯軟件編輯crontab。文件內容與/etc/crontab格式相同。示例如下:
0 3 * * * /home/dbbackup/db1backup.sh backup0 4 * * * /home/dbbackup/db2backup.sh backup
表示每天3點執行/home/dbbackup/db1backup.sh backup,4點執行/home/dbbackup/db2backup.sh backup,如果是每五分鐘執行一次可改為:
*/5 * * * * /home/dbbackup/db2backup.sh backup
新聞熱點
疑難解答