linux下定時任務和后台運行


一:crontab -e

# 此時會進入 vi 的編輯畫面讓您編輯工作!注意到,每項工作都是一行。

#分 時 日 月 周

<==============任務的完整命令行

* * * * * /home/blue/do/rsyncfile.sh

默認情況下,任何使用者只要不被列入 /etc/cron.deny 當中,那么他就可以直接下達『 crontab -e』去編輯自己的例行性命令了!整個過程就如同上面提到的,會進入 vi 的編輯畫面, 然后以一個工作一行來編輯,編輯完畢之后輸入『 :wq』儲存后離開 vi 就可以了!

假如我們需要修改為每5分鍾運行數據同步的腳本,那么同樣使用 crontab -e 進入編輯:

*/5 * * * * /home/blue/do/rsyncfile.sh

假如服務器出了問題,有一天的數據沒有同步,於是我們就需要補數據了,假設這個補數據的腳本是/home/blue/do/rsyncfile_day.sh,但是白天是高峰期,晚上用戶不多,是低峰期,我們補數據會占用大量帶寬,尤其是白天,會影響正常業務,所以一般我們可以讓補數據任務在凌晨2點開始跑,那么同樣使用crontab -e 進入編輯:

0 2 1 4 * /home/blue/do/rsyncfile_day.sh

這樣,在4月1號凌晨2點0分就會開始啟動我們的補數據的腳本了。

同步數據,在互聯網公司是再平常不過的任務了,這里大家可以看到crontab的魅力所在了,只需要寫最簡單的業務邏輯,把調度交給crond做,就完成了一個可靠性很高的一項任務了,如果要自己去額外寫這種調度程序,不知道要花多少精力才能做到可靠穩定。

crontab的語法

crontab [-u username] [-l

-e

-r]

選項與參數:

-u :只有 root 才能進行這個任務,亦即幫其他使用者創建/移除 crontab 工作排程;

-e :編輯 crontab 的工作內容

-l :查閱 crontab 的工作內容

-r :移除所有的 crontab 的工作內容,若僅要移除一項,請用 -e 去編輯

查詢使用者目前的 crontab 內容:

crontab -l

*/5 * * * * /home/blue/do/rsyncfile.sh

0 2 1 4 * /home/blue/do/rsyncfile_day.sh

清空使用者目前的 crontab:

crontab -r

crontab -l

no crontab for blue

如果你想刪除當前用戶的某一個crontab任務,那么使用crontab -e進入編輯器,再刪除對應的任務。

crontab的限制

/etc/cron.allow:將可以使用 crontab 的帳號寫入其中,若不在這個文件內的使用者則不可使用crontab;

/etc/cron.deny:將不可以使用 crontab 的帳號寫入其中,若未記錄到這個文件當中的使用者,就可以使用crontab 。

以優先順序來說, /etc/cron.allow 比 /etc/cron.deny 要優先,而判斷上面,這兩個文件只選擇一個來限制而已,因此,建議你只要保留一個即可, 免得影響自己在配置上面的判斷!一般來說,系統默認是保留/etc/cron.deny ,你可以將不想讓他運行 crontab 的那個使用者寫入 /etc/cron.deny當中,一個帳號一行!

 

二、& 后台執行命令

當在前台運行某個作業時,終端被該作業占據;而在后台運行作業時,它不會占據終端。可以使用&命令把作業放到后台執行。

如:

30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh&

在后台運行作業時要當心:需要用戶交互的命令不要放在后台執行,因為這樣你的機器就會在那里傻等。

不過,作業在后台運行一樣會將結果輸出到屏幕上,干擾你的工作。如果放在后台運行的作業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個文件中:

如:

command >out.file 2>&1 &

在這個例子中,2>&1表示所有的標准輸出和錯誤輸出都將被重定向到一個叫做out.file 的文件中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM