前言
這兩週學了很多東西,還把golang語言基本掌握了,收穫還是挺多的。在做安全的過程中,有很多需要定時執行的任務,比如抓取主機數量,端口數據等,這都逃不開linux中的crontab命令,今天分享一下crontab這個小知識點。提醒大家一下,在大公司服務器中,部署的基本上都是CentOS,所以大家想學CentOS上的操作,推薦大家看一下《鳥哥私房菜》
命令說明
crontab 命令可以在固定的間隔時間執行指定的系統指令或 shell script腳本。時間間隔的單位可以是分鐘、小時、日、月、周及以上的任意組合。
命令格式
crontab [-u user] file
或者
crontab [-u user] [-e | -l | -r]
參數解釋
-u user:用來設定某個用戶的crontab服務,linux下可能有很多用戶,每個用戶對應着一份crontab任務清單。
file:是命令文件的名字,表示file作爲crontab的任務清單進行載入。
-e:編輯某個用戶的crontab文件內容,如果不指定用戶,則是代表這個當前用戶。
-l:顯示某個用戶的crontab文件內容,如果不指定用戶,則是代表這個當前用戶。
-r:從/var/spool/cron目錄中刪除某個用戶的crontab文件,如果不指定用戶,則刪除當前用戶的crontab文件。
-i:在刪除用戶crontab給出確認提示
crontab文件
crontab命令參數相信大家已經瞭解了,那crontab文件中,我們需要按照什麼格式寫內容,cron服務纔會幫助我們定時執行呢?
基本格式
每一條我們想執行的任務,即爲crontab文件中的一行內容。這一行內容的基本格式如下:
minute hour day month week command
minute,hour,day,month,week,command之間以空格相隔,格式含義如下:
minute: 表示分鐘,可以是從0到59之間的任何整數。
hour:表示小時,可以是從0到23之間的任何整數,0代表着0點。
day:表示日期,可以是從1到31之間的任何整數,即爲一個月中的某一天。
month:表示月份,可以是從1到12之間的任何整數。
week:表示星期幾,可以是從0到7之間的任何整數,這裏的0或7代表星期日。
command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。
在以上各個字段中,還可以使用以下特殊字符:
星號(*):代表所有可能的值,例如month字段如果是星號,則表示在滿足其它字段的制約條件後每月都執行該命令操作。
逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鐘執行一次。
實例
在上述講解後,不知大家會不會用了?下面講一些實例,幫助大家理解和使用。
每小時的第10和15分鐘執行命令
10,15 * * * * command
2.每隔兩天的上午3點到5點的第10和第15分鐘執行
10,15 3,5 */2 * * command
3.每週六或者週日的4:45 ping一下百度
45 4 * * 6,0 ping www.baidu.com
4.每週一的18 : 00至23 : 00之間每隔30分鐘執行python -h
0,30 18-23 * * 1 python -h
crond服務
crontab文件是靠crond服務保障執行的,下面是crond服務的一些小操作。
service crond start //啓動服務
service crond stop //關閉服務
service crond restart //重啓服務
service crond reload //重新載入配置
service crond status //查看服務狀態
注意事項
在crontab文件中定義多個調度任務時,需要特別注意環境變量的設置,因爲我們手動執行某個任務時,是在當前shell環境下進行的,程序當然能找到環境變量,而系統自動執行任務調度時,是不會加載任何環境變量的,因此,就需要在crontab文件中指定任務運行所需的所有環境變量,這樣系統執行任務調度時就沒有問題了,所以你要保證在shell腳本中提供所有必要的路徑和環境變量。
注意點如下:
1.執行腳本時最好要寫全局路徑
2.執行的腳本,比如start.sh,如果引用了環境變量,需要在腳本中使用source加載環境變量。start.sh部分內容示例如下:
!/bin/shsource /etc/profile ......
3.手動執行腳本沒問題,但是crontab不執行,這也有可能是環境變量的問題。可以直接在crontab命令總引入環境變量。
* * * * * source /etc/profile;python -h