Linux下指令檔的自動執行
由於最近項目涉及到linux shell指令碼和指令檔的自動運行,所以打算用寫部落格的方式來征服它。下面就讓我們共同來學習吧:
本文也採納了網上一些優秀的部落格,再加上自己在虛擬機器上的實際操作。
Linux下自動執行指令檔的工具是cron,可以讓一個指令碼或者程式在不需要人為介入的時候自動運行,cron是linux的內建服務,但是它不是自動起來的,需要我們用命令對它進行開啟或者關閉:
命令有:
/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置
也可以不加前面的/sbin/,直接用/service crond xxx也是可以的。
cron也可以在系統啟動的時候就自動運行起來,在/etc/rc.d/rc.local這個指令碼的末尾加上:
/sbin/service crond start或者service crond start
好了,上面兩種方法就算是把cron啟動起來了,下面就用crontab命令來編輯。
首先,說下crontab命令的一些參數:
crontab -u //設定某個使用者的cron服務,一般root使用者在執行這個命令的時候需要此參數
crontab -l //列出某個使用者cron服務的詳細內容
crontab -r //刪除某個使用者的cron服務
crontab -e //編輯某個使用者的cron服務
呵呵,對這些命令模糊是吧,我們舉例說明:
比如:
1.你以root身份登入,這時如果你想查看自己的cron設定,就輸入:crontab -u root -l
2.如果你想對cron進行編輯,這時就輸入:crontab -u root -e 或者也可以輸入:crontab -e(表示以目前使用者的身份進行編輯)
好了,如果你執行了上面的命令語句,那你一定進入了一個vi編輯介面,哈哈,這時你要輸入什麼內容呢...讓我來分析分析。
這裡面的內容應該可以分為前後兩部分,前面就是你想執行的指令碼或者程式的時間了,後部分就是你指令碼或者程式所在的路徑了,詳細說:
前部分:
分鐘(0-59) 小時(0-23) 日期(1-31) 月份(1-12) 星期(0-6)//0代表星期天,要注意的是,中間要以空格隔開,不要連著寫了,另外除了數字還有幾個個特殊的符號就是"*"、"/"和"-"、",",*代表所有的取值範圍內的數字,"/"代表每的意思,"*/5"表示每5個單位,"-"代表從某個數字到某個數字,","分開幾個離散的數字。剩下的就是根據你自己的需求自己組合吧。
後部分:
這部分就簡單了吧,就是你的檔案路徑加檔案名稱。
前後合起來,比如你想在每天的上午9點執行/root/hello.sh,這時你只需要在前面說的vi編輯裡面輸入:
0 9 * * * /root/hello.sh
儲存退出,每次編輯完某個使用者的cron設定後,cron自動在/var/spool/cron下產生一個與此使用者同名的檔案,此使用者的cron資訊都記錄在這個檔案中,這個檔案是不可以直接編輯的,只可以用crontab
-e 來編輯(也可用vim編輯:# vim
/var/spool/cron/root)。cron啟動後每過一份鐘讀一次這個檔案,檢查是否要執行裡面的命令。因此此檔案修改後不需要重新啟動cron服務。好了,這個shell檔案就會在每天上午的9點準時執行的。
cron服務每分鐘不僅要讀一次/var/spool/cron內的所有檔案,還需要讀一次/etc/crontab,因此我們配置這個檔案也能運用 cron服務做一些事情。用crontab配置是針對某個使用者的,而編輯/etc/crontab是針對系統的任務。此檔案的檔案格式是:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出現錯誤,或者有資料輸出,資料作為郵件發給這個帳號
HOME=/ //使用者啟動並執行路徑,這裡是根目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小時執行/etc/cron.hourly內的指令碼
02 4 * * * root run-parts /etc/cron.daily //每天執行/etc/cron.daily內的指令碼
22 4 * * 0 root run-parts /etc/cron.weekly //每星期執行/etc/cron.weekly內的指令碼
42 4 1 * * root run-parts /etc/cron.monthly //每月去執行/etc/cron.monthly內的指令碼
大家注意"run-parts"這個參數了,如果去掉這個參數的話,後面就可以寫要啟動並執行某個指令碼名,而不是檔案夾名了
/usr/lib/cron/cron.allow表示誰能使用crontab命令。如果它是一個空檔案表明沒有一個使用者能安排作
業。如果這個檔案不存在,而有另外一個檔案/usr/lib/cron/cron.deny,則只有不包括在這個檔案中的用
戶才可以使用crontab命令。如果它是一個空檔案表明任何使用者都可安排作業。兩個檔案同時存在時
cron.allow優先,如果都不存在,只有超級使用者可以安排作業。
還是夠簡單的吧?
先貼這一點吧,我也還在繼續研究中,後面會陸續更新的,一定會吧cron給征服了!
有任何疑問留言討論^_^