在windows下,系統提供了計畫任務功能,我們可以在「控制面板 -> 效能與維護 -> 任務計畫」找到,它用於安排自動執行的任務。通過「新增任務計畫」引導,我們可建立乙個定時執行的任務。
在linux下,你可能已經發現系統常常自動地執行一些任務,是誰在支配它們工作?在某個時間點,你想讓備份程式自動執行,這該怎麼做?例行的工作又分為一次性定時工作與迴圈定時工作,哪些程序在負責這些?如果你想在老婆生日的前一天,發出一封信提醒自己不要忘記,又該怎麼做?
一次性定時計畫任務at,可以實現。
at
[引數]
[時間]
在乙個指定的時間,執行一次性的定時計畫任務。需要在系統中安裝at命令包,並開啟守護程序atd
-m,當指定的任務完成之後,將給使用者傳送郵件,即使沒有標準輸出
-i,atq的別名
-d,atrm的別名
-v,顯示任務被執行的時間
-c,列印任務的內容到標準輸出
-v,顯示版本資訊
-q 《列隊》,使用指定的列隊
-f 《檔案》,從指定檔案讀入任務,而不是從標準輸入讀入
-t 《時間引數》,以時間引數的形式,提交要執行的任務
還可以使用相對計時法,這對於制定不久就要執行的任務很有好處。
另一種計時方法是直接使用today(今天)、tomorrow(明天)來指定完成命令的時間。
hh
:mmex> 04:00
hh
:mmyyyy-mm-dd
ex> 04:00 2009-03-17
hh
:mm[am|pm]
[month]
[date]
ex> 04pm
march 17
hh
:mm[am|pm] + number
[minutes|hours|days|weeks]
ex> now + 5 minutes
ex> 04pm + 3 days
也就是說,在某個時間點再加幾個時間段後,才進行該項任務。
例一:安裝at命令,並啟動atd服務
命令:
/etc/init.d/atd
// 表示可以省略的選項,{}表示必要選項,|表示或
說明:要使用一次性計畫任務時,linux必須啟動負責此任務的服務程序,即atd服務。 然而並非所有的linux發行版都預設將其啟動。因此,我們需要手動開啟atd服務。
# /etc/init.d/atd stop
停止 atd:[確定]
# ps -ef|grep atd
root 25062
24951
014:53 pts/0
00:00:00 grep atd
# /etc/init.d/atd start
[確定] td:[確定]
# ps -ef|grep atd
root 2506810
14:53 ? 00:00:00 /usr/sbin/atd
root 25071
24951
014:53 pts/0
00:00:00 grep atd
# /etc/init.d/atd restart
停止 atd:[確定]
[確定]td:[確定]
# systemctl enable atd // 開機自啟動
例二:在三天後的下午5點,執行/bin/ls
命令:at 5pm + 3 days
# at 5pm + 3 days
at> /bin/ls
at> job 7
at2013-01-08
17:00
說明:退出at命令,要用ctrl+d
例三:明天17點鐘,輸出時間到指定檔案
命令:at 17:20 tomorrow
# at 17:20 tomorrow
at> date > /root/2013.
logat> job 8
at2013-01-06
17:20
例四:在執行計畫任務之前,用atq檢視系統有無此任務計畫
命令:atq
# atq
82013-01-06
17:20
a root
72013-01-08
17:00
a root
例五:刪除已經設定的任務
命令:at rm 7
# atq
82013-01-06
17:20 a root
72013-01-08
17:00 a root
# atrm 7 // 刪除序號
# atq
82013-01-06
17:20 a root
例六:顯示已經設定的計畫任務內容
命令:at -c 8
# at -c 8 // 顯示8號任務的內容
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22此處省略n個字元
date > /root/2013.log
既然是計畫任務,那麼系統應該有相應的執行方式,並將這些計畫任務排進任務列表。事實上,我們使用at產生所要執行的計畫任務,並以檔案的形式寫入/var/spool/at/目錄內,該工作便能等待atd的取用與執行。
考慮到系統安全,並不是所有人都可以執行at計畫任務。在遭受黑客攻擊後,主機當中多了許多黑客程式,這些程式非常可能是運用一些計畫任務來執行或蒐集系統的執行資訊,並定時傳送給黑客。所以除非是你認可的帳號,否則不要讓其他使用者使用at。
那怎樣達到安全可控地使用at呢?
我們可以使用/etc/at.allow和/etc/at.deny來限制at的使用,加上這兩個檔案後, at 的工作情況是這樣的:
先找到/etc/at.allow檔案,寫在這個檔案中的使用者才能使用at,沒有寫在檔案中的使用者,則不能使用at (即使沒有寫在at.deny檔案中)
如果/etc/at.allow不存在,就尋找/etc/at.deny檔案。寫在at.deny的使用者,不能使用at,沒有寫在at.deny檔案的使用者,可以使用at命令。
如果兩個檔案都不存在,那只有root使用者可以使用at。
通過這個說明,我們知道/etc/at.allow是較為嚴格的管理方式,而/etc/at.deny則較為鬆散。因為帳號沒有在該檔案中,就能執行at。
在一般的linux發行版中,系統假設所有使用者都是可信的,因此通常會保留乙個空的/etc/at.deny檔案,意思是允許所有使用者使用at(你可以自行檢查一下該檔案)。如果不希望某些使用者使用at的話,你可以將使用者名稱寫入/etc/at.deny中,乙個帳號寫一行。
每天乙個Linux命令
將我遇到的linux指令總結一下,不斷增加 1 sz和rz 一般來說,linux 伺服器大多是通過 ssh客戶端來進行遠端的登陸和管理的,使用 ssh登陸 linux ssh有關的兩個命令可以提供很方便的操作 sz 將選定的檔案傳送 send 到本地機器 rz 執行該命令會彈出乙個檔案選擇視窗,從本...
每天乙個linux命令
linux cmp命令 linux cmp命令用於比較兩個檔案是否有差異。當相互比較的兩個檔案完全一樣時,則該指令不會顯示任何資訊。若發現有所差異,缺省會標示出第乙個不同之處的字元和列數編號。若不指定任何檔名稱或是所給予的檔名為 則cmp指令會從標準輸入裝置讀取資料。語法cmp clsv i 字元數...
每天乙個 Linux 命令
head 與 tail 就像它的名字一樣的淺顯易懂,它是用來顯示開頭或結尾某個數量的文字區塊,head 用來顯示檔案的開頭至標準輸出中,而 tail 想當然爾就是看檔案的結尾。1 命令格式 head 引數 檔案 2 命令功能 head 用來顯示檔案的開頭至標準輸出中,預設head命令列印其相應檔案的...