當我們需要一些自動定時提醒或者每天下班自動執行備份,定期自動重啟某些服務清理某些快取時,如何在大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的結合使用:
鬧鐘定時提醒
1 查詢資料庫裡的設定是時間,內容 list list objectservice.planclockservice remindtime controller 2 public list remindtime 3 返回controller 定義兩個陣列 arraylist list3 new ar...
定時提醒軟體
前段時間忙專案,忙完之後才發現,自己現在座了一段時間就有些背疼。今天又看了一天的資料,現在背是疼的,肩膀是酸的。搞it的弊端,特別是搞軟體開發的,基本上都有個肩膀 背 脊椎等問題。人還沒老,身體問題就一堆。現代人也不容易啊!給自己乙個定時提醒吧,坐久了起來走走,活動活動筋骨。要不真老了,想泡網都泡不...
ubunru 定時關機和提醒
現在熬夜越來越嚴重,大部分時間都是因為坐在電腦前。為了提醒自己及時休息,推薦大家用crontab計畫任務給ubuntu設定乙個定時關機,以及用notify send在關機前幾分鐘定時冒泡提醒即將關機。先確認已經ubuntu已經安裝並執行了crond harry ubuntu sudo service...