Linux的計劃任務 |
linux定時任務的分類(本文主要講解crontab):
batch與at相同,不過它是在系統負載小於0.8的時候執行調度。
定時任務的作用: 例如,自動在線更新 自動日誌分析(日誌佔用inode而且影響讀寫性能) 某些後臺工作定時執行 定時刪除臨時文件 需要防範的地方: 1、***程序可能使用工作調度來蒐集系統信息 2、很多***是以例行工作被植入的,可以檢查/var/log/cron看是否非你設置的cron被執行了 3、部分離職員工會利用計劃去做破壞 |
crond的日誌文件/var/spool/cron cron的每一項工作都會記錄到/var/log/cron這個日誌文件中 cron會每分鐘都去讀取一次/etc/crontab與/var/spool/cron裏面的數據 PATH定義變量的執行路徑
|
1、 配置文件 vim /etc/crontab SHELL=/bin/bash //使用的shell PATH=/sbin:/bin:/usr/sbin:/usr/bin //執行文件查找命令 MAILTO=root //額外輸出,以email將數據發送給誰
2、 計劃任務存放位置 /var/spool/cron 3、日誌文件 查看計劃任務是否執行 /var/log/cron 4、以下目錄內可以存放腳本 該腳本就會按照時間去執行 /etc/cron.hourly/ 每小時 /etc/cron.weekly/ 每週日 /etc/cron.daily/ 每天 /etc/cron.monthly/ 每月1號 5、權限管理 /etc/cron.deny 黑名單 在此文件中寫入的用戶不可以使用crond /etc/cron.allow 白名單 只有在此文件中寫入的用戶可以使用crond |
注意事項
[root@ansible-db log]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin(請注意:crontab的PATH變量與系統的PATH變量不同,可能會導致部分命令無法使用,crontab執行shell時只能識別爲數不多的系統環境變量,解決辦法就是要執行的語句都放在腳本中,同時在腳本中聲明變量) MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed [root@ansible-db log]# echo $PATH /usr/local/redis/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin |
crontab標準化工作流程 1、計劃任務腳本指定存放位置,便於維護和定期備份 /etc/crontab 2、寫定時任務前必須在前面寫註釋,包括以下: 添加計劃任務的人,添加任務的時間,任務有效期,計劃任務腳本的對象,腳本的作用,以及其他需要提醒其他注意的事項 3、執行的腳本前加上/bin/bash或者/bin/sh,腳本必須使用完整的絕對路徑 4、定時任務,需要儘量避免標準輸出和標準錯誤輸出 結尾加上 >/dev/null 2>&1. 計劃任務的標準輸出和標準錯誤輸出都會給root用戶以郵件(在配置文件中定義的),很容易撐滿磁盤消耗磁盤inode 5、能用命令完成的也要寫在腳本里 6、在指定用戶下執行相關的定時任務 7、制定標準的書寫規範 其他使用注意: 環境變量問題:計劃文物的腳本得環境變量需要在腳本重新定義,可以手動在腳本內加載環境變量的配置文件如 8、定時任務的權限檢查(chmod u+x /tmp/b.sh,儘量在腳本前面帶上/bin/sh命名,否則有可能因爲忘了爲腳本設定執行權限) 9、定時任務腳本的檢查(sh –x 調試,bash –n檢查語法,在各個細小環境減少出錯的機會。) 10、先在測試環境中演練 |
example: 1、報錯如下, /bin/sh: /tmp/20190428.sh: Permission denied 檢查腳本權限問題
2、每一分鐘執行一次腳本 */1 * * * * sh /tmp/20190428.sh 3、只保留最近1個月的日誌文件 crontab -e 1 * * * * find /var/log -mtime +30 |xarge -i rm -rf {} 或者 -exec rm -rf {} \; 4、jim用戶每天在家目錄創建一個以日期命名的目錄20170412 crontab -u jim -e 1 0 * * * /bin/mkdir /home/jim/`date +%Y%m%d` 5、>/dev/null 2>&1的作用 如果定時任務規範結尾不加 >/dev/null 2>&1,很容易導致硬盤inode空間被佔滿,從而系統服務不正常 (var/spool/clientmqueue郵件臨時隊列目錄,垃圾文件存放於此,如果是centos 6.4系統,默認不裝sendmail服務,所以不會有這個目錄。) 工作調度出錯後會一直髮郵件給MAILTO設置的郵箱,可以使用重定向輸出到黑洞 |
1 * * * *是每個整點過一分鐘執行