當我們需要一些自動定時提醒或者每天下班自動執行備份,定期自動重啟某些服務清理某些快取時,如何在大linux上使用幾句shell命令完成實現這份任務的自動化呢? notify-send和crontab的結合就可以輕鬆實現定時執行,自動彈出通知提醒等。
程式包libnotify-bin為x桌面系統提供了向桌面傳送通知的功能,ubuntu 9.04之後已經自帶該功能,其它linux發行版根據具體情況先安裝,ubuntu安裝示例:
apt-get install libnotify-bin
使用notify-send命令介紹如下(man notify-send命令檢視):
notify-send
"notifytest"
"i am a test notification."
notify-send
"notification title"
"the message body is shown here"
-i /home/jokerlee/icon.png -t
1000
使用notifyosd定製ubuntu 14.04的通知行為,打造更酷炫多樣的通知形式
參考》
crontab命令常見於unix和類unix的作業系統之中,用於設定週期性被執行的指令。該命令從標準輸入裝置讀取指令,並將其存放於「crontab」檔案中,以供之後讀取和執行。crontab 是用來讓使用者在固定時間或固定間隔執行程式之用,換句話說,也就是類似使用者的任務計畫表。
crontab -r : 刪除目前的任務表
crontab -l : 列出目前的任務表
crontab -e : 執行文字編輯器來設定任務表
使用者所建立的crontab檔案中,每一行都代表一項任務,每行的每個字段代表一項設定,它的格式共分為六個字段,前五段是時間設定段,第六段是要執行的命令段,格式如下:
minute hour day month week command
minute: 表示分鐘,可以是從0到59之間的任何整數。
hour:表示小時,可以是從0到23之間的任何整數。
day:表示日期,可以是從1到31之間的任何整數。
month:表示月份,可以是從1到12之間的任何整數。
week:表示星期幾,可以是從0到7之間的任何整數,這裡的0或7代表星期日。
在以上各個欄位中,還可以使用以下特殊字元:
星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。
逗號(,):可以用逗號隔開的值指定乙個列表範圍,例如,「1,2,5,7,8,9」
中槓(-):可以用整數之間的中槓表示乙個整數範圍,例如「2-6」表示「2,3,4,5,6」
正斜線(/):可以用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次。
有時我們加入crontab內的任務無法自動執行,而手動執行這個任務卻沒有問題,這種情況一般是由於在crontab檔案中沒有配置環境變數引起的。因為我們手動執行某個任務時,是在當前shell環境下進行的,程式當然能找到環境變數,而系統自動執行任務排程時,是不會載入任何環境變數的,因此,就需要在crontab檔案中指定任務執行所需的所有環境變數,這樣,系統執行任務排程時就沒有問題了。
* 10 * * 1-5 . /home/jokerlee/notify_dinner
eval
"export $(egrep -z dbus_session_bus_address /proc/$(pgrep -u $logname gnome-session)/environ)"
export display=:0
因為執行gui程式需要提供display環境變數,而ubuntu 14.04根據資料還需要提供dbus_session_bus_address environment variable
具體原因可以檢視stack overflow上大神的回答 >
ps:
crontab新增的任務需要重啟cron服務才會立即生效
ubuntu重啟命令:
sudo service cron restart
sudo /etc/init.d/cron start
更多發行版的cron服務啟動》
cron服務執行每一條任務都會將輸出資訊通過電子郵件的形式傳送給當前系統使用者或者記錄在系統日誌/var/log/syslog(ubuntu 14.04,同樣檢視該檔案可以知曉加入的定時任務是否正常按時執行),這樣日積月累,日誌資訊會非常大,可能會影響系統的正常執行,因此,將每條任務進行重定向處理非常重要。
可以在crontab檔案中設定如下形式,忽略日誌輸出:
0 /3 * * /usr/local/apache2/apachectl restart >/dev/null 2>&1
「/dev/null 2>&1」表示先將標準輸出重定向到/dev/null,然後將標準錯誤重定向到標準輸出,由於標準輸出已經重定向到了/dev/null,因此標準錯誤也會重定向到/dev/null,這樣日誌輸出問題就解決了。
crontab更詳細的使用介紹:
notify-send與inotify的結合使用:
Linux linux定時任務crontab
crontab命令的功能是在一定的時間間隔排程一些命令的執行。它的配置檔案是 etc crontab。vim etc crontab etc crontab中每行指定乙個定時任務,其描述格式如下 minute hour daymonth dayofweek commandminute 從0到59的整...
linux linux上設定定時任務
由於linux上部署了比較多docker服務,在部署服務的過程中,會生成很多tag為none的映象。需要做的就是,定時清理這些tag為none的映象,為伺服器減少占用空間。過程也很簡單。第一步 在某個資料夾下,新建sh 檔案 內容是 刪除tag為none的映象 bin bash docker rmi...
AndroidStudio執行編譯慢的提速方法
gradle.properties配置檔案,當然這個方法也不是萬能的,有的同學能用而有的同學不一定能用,這得看情況吧。首先找到你工程目錄下的gradle.properties配置檔案,然後開啟並在其中新增以下配置 org.gradle.daemon true org.gradle.jvmargs x...