1.確保系統服務啓動
systemctl status crontab
二、修改/etc/crontab
天天凌晨三點,執行123.sh腳本文件,正確的和錯誤的日誌都輸出到123.log文件中
0 3 * * * /bin/bash /usr/local/sbin/123.sh >/tmp/123.log 2>/tmp/123.log
由於是天天三點執行腳本,因此能夠寫成追加,天天都去記錄日誌
0 3 * * * /bin/bash /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log
每條任務調度執行完畢,系統都會將任務輸出信息經過電子郵件的形式發送給當前系統用戶,這樣日積月累,日誌信息會很是大,可能會影響系統的正常運行,所以,將每條任務進行重定向處理很是重要。 例如,能夠在crontab文件中設置以下形式,忽略日誌輸出:
0 3 * * * /bin/bash /usr/local/sbin/123.sh >/dev/null 2>&1
「/dev/null 2>&1」表示先將標準輸出重定向到/dev/null,而後將標準錯誤重定向到標準輸出,因爲標準輸出已經重定向到了/dev/null,所以標準錯誤也會重定向到/dev/null,這樣日誌輸出問題就解決了。
3.etc/crontab解釋
----------
SHELL=/bin/bash
#SHELL變量指定了系統要使用哪一個shell,這裏是bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#PATH變量指定了系統執行命令的路徑
MAILTO=root
#MAILTO變量指定了crond的任務執行信息將經過電子郵件發送給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 //星期,0或7都表示週日,也能夠寫成英文的簡寫
# | | | | |
# * * * * * user-name command to be executed //用戶,不寫用戶就是root 最後一列,是你要執行的命令
星號(*):表明全部可能的值,例如month字段若是是星號,則表示在知足其它字段的制約條件後每個月都執行該命令操做。
逗號(,):能夠用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」
中槓(-):能夠用整數之間的中槓表示一個整數範圍,例如「2-6」表示「2,3,4,5,6」
正斜線(/):能夠用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線能夠和星號一塊兒使用,例如*/10,若是用在minute字段,表示每十分鐘執行一次。
#爲何沒有年份?
#用星期肯定你的惟一性,好比說今年的6月18號和明年的6月18號的星期確定是不一樣的,這樣就能夠肯定某一天的惟一性
----------
4.注意事項
1. 注意環境變量問題
# 腳本中涉及文件路徑時寫全局路徑;
# 腳本執行要用到java或其餘環境變量時,經過source命令引入環境變量:source /etc/profile
2.命令的執行最好用腳本
3.腳本權限加/bin/sh,規範路徑/server/scripts
4.時間變量用反斜線轉義,最好用腳本
5.定時任務添加註釋
6.>/dev/null 2>&1 ==>&>/dev/null,別隨意打印日誌文件
7.定時任務裏面的程序腳本儘可能用全路徑
8.避免沒必要要的程序以及命令輸出
9.定時任務以前添加註釋
10.打包到文件目錄的上一級java