定時任務程總結

定時任務程總結

程序的概念
程序是爲決解一個信息處理任務而預先編制的工作執行方案
簡單的說:我們使用的命令就是程序;QQ程序;聽歌MP34軟件;linux系統也是程序
基本特徵:一堆代碼,一個文件,一個命令。程序靜態的,放在電腦中沒有沒有運行
程序:放在磁盤裏
進程概念
簡單的說,把系統的程序運行起來就是進程,進程放在內存中
所謂進程就是指正在運行的程序,每當輸入一個命令時,shell也會同時啓動一個守護進程
每個進程啓動時,系統會指定一個唯一的數字給每個進程,這個數字稱爲進程(ID)或者PID
每個進程都可能以兩種方式存在:一個前臺和一個後臺
一般的系統網絡服務都是以後臺方式存在,且都會常駐在系統中,直到關機或者主動殺死時

[root@oldboy ~]# netstat -tunlp |grep sshd
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1286/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1286/sshd     

第一個帶有進程或者守護進程的服務
第1章 Crond定時任務服務
Linux的定時任務服務crond(crontab)
Crond是linux系統中用來定期執行命令和指定程序任務的一種服務或軟件
安裝系統默認存在,在優化開機自啓動是一個服務
Crond服務默認情況(每分鐘),會檢查系統中是否需要執行的定時任務,如果有,就會根據事先定義好的規則來執行這個定時任務 【鬧鐘】

秒級任務:
1) crond無能爲力
2) 自己寫守護進程shell循環
3) Quartz也可以實現
Crond====鬧鐘

Linux定時任務分類
1、系統自身的定期執行任務
2、用戶執行的任務

1.1 Linux定時任務分類;
1) at適合執行一次就結束的調度任務。 突發性的任務,每天晚上-需要依賴atd服務
2) anacron 適合非7*24小時開機的服務器準備的。開機執行的任務,檢測停機期間沒有執行任務,開機後一次性執行一遍
3) crond 服務默認情況(每分鐘),會檢查系統中是否需要執行的定時任務,如果有,就會根據事先定義好的規則來執行這個定時任務 【鬧鐘】*****
提示:crond是一個定時任務守護進程,而crontab是用戶用來設置定時任務規則的命令

1.1.1 定時任務說明
參數:
-l 查看crontab 文件內容
-e 編輯crontab 任務內容

1.1.2 定時任務的格式語法
基本格式如下:

01 * * * * cmd
02 * * * * cmd
03 * * * * cmd
04 * * * * cmd
05 * * * * cmd
06 * * * * cmd
[root@oldboy ~]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

*# 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) ORsun,mon,tue,wed,thu,fri,sat

| | | | |

user-name command to be executed*

定時任務的寫法

[root@oldboy ~]# echo 'time sync by oldboy at 20180205' >>/var/spool/cron/root
[root@oldboy ~]# echo '*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1' >>/var/spool/cron/root 
[root@oldboy ~]# crontab -l
time sync by oldboy at 20180205
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1 每5分鐘執行一次時間同步
00 09 05 05 * 

[root@oldboy log]# echo '#print a name' >>/var/spool/cron/root
[root@oldboy log]# echo '* * * * * echo oldboy >>/server/log/oldboy.log' >>/var/spool/cron/root
[root@oldboy log]# crontab -l
#time sync by oldboy at 20180205
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
#print a name
* * * * * echo oldboy >>/server/log/oldboy.log

實例

[root@oldboy ~]# mkdir /server/scripts/ -p
[root@oldboy ~]# echo 'date +%F' >/server/scripts/oldboy.sh
[root@oldboy ~]# echo "00 09,14 * * 6,7 /sbin/sh /server/scripts/oldboy.sh" >>/var/spool/cron/root
[root@oldboy ~]# crontab -l
#time sync by oldboy at 20180205
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
#print a name
* * * * * echo oldboy >>/server/log/oldboy.log
#date snyc 
00 09,14 * * 6,7 /bin/sh /server/scripts/oldboy.sh >/dev/null 2>&1

注意:腳本中要使用絕對路徑

不加/dev/null 2>&1的話會inode會被耗盡
重點:當一個定時任務執行的時候,就會給系統發一份郵件。Sendmail郵件服務,經常是關閉的,所以定時任務發送的郵件就會臨時放在/var/spool/clientmqueue/時間長了文件數特別多。Centos5 會存在這個問題

[root@oldboy home]# rpm -qa|grep sendmail 查詢系統是否安裝sendmail服務

[root@oldboy ~]# echo 123 >>a.log 2>&1
[root@oldboy ~]# cat a.log 
123
[root@oldboy ~]# ech 123 >>a.log 2>&1
[root@oldboy ~]# cat a.log 
123
-bash: ech: command not found

讓標準錯誤和標準輸出都定向到空

書寫的方法-腳本總結:

  1. 爲定時任務編寫必要的註釋描述
  2. Shell任務前加/bin/sh
    1. 定時任務結尾加 >/dev/null 2>&1
  3. 定時任務超過2行的命令執行,最好用腳本
  4. 在指定用戶下執行相關定時任務
  5. 生產任務程序不要隨意打印輸出信息 tar zcf echo 123>
  6. 定時任務執行腳本要規範路徑 /server/scripts/
  7. 配置定時任務規範操作過程,防止出錯

工作中企業生產場景調試crontab定時任務
1) 增加任務執行頻率調試任務
2) 調整系統時間調試任務
3) 通過腳步日誌來調試任務
4) 注意一些任務命令帶來的問題
5) 注意環境變量導致定時任務失敗
6) 通過查詢定時任務日誌分析成功與否

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