linux的計劃任務(crontab)

Linux的計劃任務

linux定時任務的分類(本文主要講解crontab):

batchat相同,不過它是在系統負載小於0.8的時候執行調度。

image.png

定時任務的作用:

例如,自動在線更新

自動日誌分析(日誌佔用inode而且影響讀寫性能)

某些後臺工作定時執行

定時刪除臨時文件

需要防範的地方:

1、***程序可能使用工作調度來蒐集系統信息

2、很多***是以例行工作被植入的,可以檢查/var/log/cron看是否非你設置的cron被執行了

3、部分離職員工會利用計劃去做破壞

crond的日誌文件/var/spool/cron

image.png

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 * * * *是每個整點過一分鐘執行



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章