1. cron、crontab命令
cron是執行定時計划任務的守護進程。
當系統是多用戶運行級別時,cron進程會從/etc/init.d中自動啟動。cron進程會在目錄/var/spool/cron/contabs/下搜索定時計划任務文件(定時計划任務文件以創建次任務的賬戶名命名),並將找到的這些定時計划任務載入內存。
注意:/var/spool/cron/contabs/中的定時計划任務文件不要用文本編輯器編輯,應當使用crontab命令訪問和更新它們的內容。因為crontab命令可以檢查這些文件中的語法錯誤。
cron進程還會讀取/etc/crontab以及目錄/etc/cron.d下的內容。
cron進程每分鍾喚醒一次,審查所有存儲的定時計划任務,檢查每個命令,看它是否應該在當前時間運行。
另外,cron每分鍾會檢查一次它的池目錄/var/spool/cront/crontabs的修改時間(modtime)是否已經改變。如果修改時間已經改變,cron會檢查所有定時計划任務文件的修改時間,並重新加載那些已經被修改的定時計划任務文件。因此,當定時計划任務文件被修改后,不需要重啟cron守護進程。
注意:使用crontab修改定時計划任務文件時,它會更新池目錄/var/spool/cront/crontabs的修改時間。
crontab命令用於創建、修改、刪除和查看定時計划任務。每個用戶可以使用crontab命令創建自己的定時計划任務,生成的計划任務文件將以用戶的賬戶名命名。
定時計划任務文件由每行命令組成,每行有6個字段,由空格或制表符分隔。前五個字段表示運行任務的時間,最后一個字段是任務的命令。
前五個字段的含義依次為:
- 分鍾:0~59
- 小時:0~23
- 日期:1~31
- 月份:1~12或Jan~Dec
- 星期:0~6或Sun~Sat,0表示星期日
這五個字段中還可以使用以下特殊字符描述:
- *星號:匹配所有可能的值,如“0 6 * * *”表示每天6點
- -連字符:定義一個范圍,比如“0 2 ** 1-5”表示每周一到周五的凌晨2點
- /斜杠:表示每間隔多少時間,如“*/5 * * * *”表示每5分鍾
- ,逗號:表示或,如“0 0,6,12,18 * * *”表示每天的0點、6點、12點和18點
$ crontab -l #使用-l選項,可以列出當前用戶的所有定時計划任務,如每分鍾執行一次腳本 */1 * * * * /home/user1/test/echotime.sh $ crontab -e #使用-e選項,創建或修改當前用戶的定時計划任務 $ crontab -u user1 -l #使用-u選項,查看指定用戶的定時任務計划 */1 * * * * /home/user1/test/echotime.sh $ crontab -r #使用-r選項,移除當前用戶的定時計划任務,不經確認 $ crontab -i -r #使用-i配合-r選項,可以在移除前提示用戶確認 crontab: really delete user1's crontab?
2. at命令
at命令用於安排一個任務在指定的時間運行。可以從標准輸入讀入命令,也可以從指定的文件中讀入,然后在指定的時間運行這些命令。
語法:at [-f file] [-q queue] [OPTION] TIME [DATE]
# date # at now + 1 minutes #創建一個定時任務 at> date at> <EOT> #這里使用Ctrl+D job at [執行時間] # cat myjobs.txt /path/to/a/shell-script /path/to/any/command # at -f myjobs.txt now + 1 hour #使用-f參數,定時運行文件中的內容 job at [執行時間] # at -l #使用-l參數,列出當前用戶(非root)所有使用at命令創建的還未運行或正在運行的任務,如果是root用戶,列出所有用戶的任務 1 2013-10-07 05:00 a root # atq #atp命令與at -l一樣 # atrm 1 #通過-l列出的任務編號,刪除現有的任務
注:上述命令未嘗試
3. &控制操作符
字符“&”是Bash內置的用於並行處理進程的一個控制操作符。在命令末尾添加&會在后台運行該命令,將在當前的Shell進程下啟動一個子Shell進程,因此當該命令在后台運行時,可以繼續在此終端輸入並運行其他命令。
語法:command &或script-name &
$ sleep 10 & #將命令放到后台執行 [1] 29281 #顯示這個后台任務的編號(1)及其對應的子進程號(29281) $ jobs #使用jobs命令,可以查看后台正在運行的任務的信息 [1]+ Running sleep 10 & #正在運行 $ jobs #再次使用jobs命令查看 [1]+ Done sleep 10 #結束 $ jobs -l #jobs命令使用-l選項,可以列出后台正在運行的任務的進程號等信息 [2]+ 32203 Running sleep 10 & #這里的任務編號是2 $ %2 #使用%+通過jobs查到的任務編號,將指定的任務放到前台運行,並作為當前運行的任務 sleep 10 $ fg 2 #使用fg命令+通過jobs -l查到的任務編號,將指定的任務放到前台運行,並作為當前運行的任務 sleep 10 $ sleep 30 & #后台運行 [3] 5045 $ fg 3 #使用fg命令放到前台運行 sleep 30 ^C #這里輸入Ctrl+Z將任務掛起 $ bg 3 #使用bg命令將任務重新放到后台運行 [3]+ sleep 30 & $ jobs -l [3] 5045 Running sleep 30 &
4. nohup命令
nohup命令讓你運行的命令或腳本在你退出系統后繼續在后台運行。
語法:nohup COMMAND [ARG]... &
COMMAND:Shell腳本或命令的名稱
[ARG]:腳本或命令的參數
&:nohup命令不能自動地將任務放在后台運行,必須明確的使用&操作符
$ nohup ./echotime.sh & #使用nohup命令運行一個腳本 [1] 5327 #這里輸出任務編號(1)和后台任務的進程號(5327) $ nohup: ignoring input and appending output to 'nohup.out' #輸出一行信息,表示腳本運行輸出的所有內容都被寫入到當前目錄下的文件nohup.out中 $ ps -ef|grep 5327 #當退出系統再重新登錄后,還可以查看正在運行的腳本
本節結束