目錄:html
最近碰到一個想要實現定時自動關機的功能,關機的指令無非就是:linux
自動調用方式:web
SunRay的linux中集成了enigma2的不少東西,單單執行shutdown -h 容易讓SR4的面板不動然後臺其實已經shutdown,這時建議先要 killall -9 enigma2 > dev/null。dom
這個時候shutdown就沒法知足需求了,須要使用crontab添加定時任務。編輯器
#!/bin/sh killall -9 enigma2 > /dev/null 2 shutdown -h now
1 cd /usr/script 2 vi shutdown.sh 3 輸入e 4 <輸入上面那3行代碼> 5 按esc 6 輸入 :wq 保存
chmod +x /usr/script/shutdown.sh
1 crontab -c /var/spool/cron/crontabs -e 2 <添加以下內容:> 3 0 23 * * * /usr/script/shutdown.sh 4 按esc 5 輸入 :wq 保存
上面的步驟就能夠實現定時執行關機任務(天天夜裏11點關機),固然其餘的定時任務也是同樣的道理。測試
下面分析一下具體的原理,核心命令解釋:spa
特定介紹一下crontab的理解(來源:http://blog.csdn.net/suer0101/article/details/8052592).net
crond是一個服務,一個守護進程。crond 是linux用來按期執行程序的命令,crond命令每分鍾會按期檢查是否有要執行的工做,若是有要執行的工做便會自動執行該工做。 crontab 是用來讓使用者在固定時間或固定間隔執行程序之用,換句話說,也就是相似使用者的時程表。 按照網上查找的資料執行時常常會碰到這種錯誤: crontab: chdir(/var/spool/cron/crontabs): No such file or directory 因此首先建立這樣一個目錄吧! #mkdir -p /var/spool/cron/crontabs 而後編輯要執行的任務 #crontab -e 0 */1 * * * /sbin/ntpdate 192.168.1.67 >/dev/null 2>&1 每隔一個小時更新下時間,不打印任何信息 最後,執行下 #crond 此時你會發現/var/spool/cron/crontabs下有一個跟用戶名相同的文件,保存着要執行的任務。 ps下會發現cron進程已經啓動!
我在SR4中的測試結果是,當-e 添加計劃任務碰到錯誤‘crontab: chdir(/var/spool/cron/crontabs): No such file or directory’code
請使用命令(手工指定一個正確的目錄)htm
crontab -c /var/spool/cron/crontabs -e
在緊接着其中的vi界面內,添加 好比(表明天天的23點0分執行):
0 23 * * * /usr/script/shutdown.sh
具體參數說明(來源:http://blog.hexu.org/archives/703.shtml)
名稱 : crontab 使用權限 : 全部使用者 使用方式 : crontab [ -u user ] file crontab [ -u user ] { -l | -r | -e } 說明 : crontab 是用來讓使用者在固定時間或固定間隔執行程序之用,換句話說,也就是相似使用者的時程表。 -u user 是指設定指定 user 的時程表,這個前提是你必需要有其權限(好比說是 root)纔可以指定他人的時程表。若是不使用 -u user 的話,就是表示設定本身的時程表。 -e : 編輯,執行文字編輯器來設定時程表,內定的文字編輯器是 VI,若是你想用別的文字編輯器,則請先設定 VISUAL 環境變數來指定使用那個文字編輯器(好比說 setenv VISUAL joe) -r : 刪除目前的時程表 -l : 列出目前的已經設置的列表,格式以下:f1 f2 f3 f4 f5 program 其中f1/f2/f3/f4/f5 分別表示分鐘/小時/一個月的第幾日/月/一個星期中的第幾天。program 表示要執行的程序。 當 f1 爲 * 時表示每分鐘都要執行 program, 當 f1 爲 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內要執行, 當 f1 爲 */n 時表示每 n 分鐘個時間間隔執行一次, 當 f1 爲 a, b, c,… 時表示第 a, b, c,… 分鐘要執行, 當 f2 爲 * 時表示每小時都要執行程序,其他類推. 當 f2 爲 a-b 時表示從第 a 到第 b 小時都要執行,其他類推 當 f2 爲 */n 表示每 n 小時個時間間隔執行一次,其他類推 當 f2 爲 a, b, c,… 時表示第 a, b, c…個小時要執行,其他類推 例子 : 每個月天天每小時的第 0 分鐘執行一次 # program: /bin/ls 0 * * * * /bin/ls 在 12 月內, 天天的早上 6 點到 12 點中,每隔 20 分鐘執行一次/usr/bin/backup : 0 6-12/3 * 12 * /usr/bin/backup 週一到週五天天下午 5:00 寄一封信給 alex@domain.name : 0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata 每個月天天的午夜 0 點 20 分, 2 點 20 分, 4 點 20 分….執行 echo 「haha」 20 0-23/2 * * * echo "haha"