linux 定時任務 cron,利用cron進程保活


cron定時任務

crond服務操作命令
  /sbin/service crond start //啟動服務
  /sbin/service crond stop //關閉服務
  /sbin/service crond restart //重啟服務
  /sbin/service crond reload //重新載入配置
  /sbin/service crond status //查看服務狀態 

一、crontab命令選項

#crontab -u <-l, -r, -e>
-u:指定一個用戶
-l:列出某個用戶的任務計划
-r:刪除某個用戶的任務
-e:編輯某個用戶的任務
 
Minute Hour Day Month Week command  
分鍾    小時  天   月   星期   命令  
0-59   0-23 1-31 1-12 0-6  command  
“*”代表取值范圍內的數字, 
“/”代表”每”, 
“-”代表從某個數字到某個數字, 
“,”分開幾個離散的數字
 
每次編輯完某個用戶的cron設置后,cron自動在/var/spool/cron下生成一個與此用戶同名的文件,此用戶的cron信息都記錄在這個文件中,這個文件是不可以直接編輯的,只可以用crontab -e 來編輯。cron啟動后每過一份鍾讀一次這個文件,檢查是否要執行里面的命令。因此此文件修改后不需要重新啟動cron服務。

二、/etc/crontab

如在 /etc/crontab 文件中run-parts部分所示,它使用 run-parts 腳本來執行存在於 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目錄中的腳本,這些腳本被相應地按照預設時間在每小時、每日、每周、或每月執行。這些目錄中的文件應該是 shell 腳本,並且具有可執行權限(chmod +x filename)。
 
如果某 cron 任務需要根據調度來執行,而不是每小時、每日、每周、或每月地執行,它可以被添加到/etc/cron.d目錄中。該目錄中的所有文件使用和 /etc/crontab 中一樣的語法。

一、/etc/crontab文件和crontab -e命令區別

1、格式不同

前者

# 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

后者

#50 1 * * *  command

2、使用范圍

修改/etc/crontab這種方法只有root用戶能用,這種方法更加方便與直接直接給其他用戶設置計划任務,而且還可以指定執行shell等等,
crontab -e這種所有用戶都可以使用,普通用戶也只能為自己設置計划任務。然后自動寫入/var/spool/cron/usename
3.服務重啟
 1 /etc/init.d/crond restart
 2 service crond restart

四、cron任務文件

cron 會從如下這些地方讀取安裝的任務:

/etc/anacrontab
這個文件存着系統級的任務。它主要用來運行每日的(daily),每周的(weekly),每月的(monthly)的任務。一般不在此文件安裝自己的任務

/etc/cron.d/
此目錄下存放的是系統級任務的任務文件。

/var/spool/cron/
此目錄下存放各個用戶的任務文件。各個用戶的任務存放在以自已用戶名為文件名的任務文件中。此文件中的指令行沒有用戶域。

五、日志文件

可以通過查看文件/var/log/cron查看任務的運行情況。

新任務安裝后或任務修改后不需要重啟cron進程即可生效

六、例子:每天執行一次的日志清理任務

#!/bin/sh
find /opt/taobao/install/antdnsfilter/logs/antdnsfilter -type f -ctime +10 | xargs rm -f

 

保存文件cleanlog,放到/etc/cron.daily/目錄下,文件權限755. 每天03:40:01執行

七、例子:進程保活,每分鍾執行一次 

* * * * * root  /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1

 保存文件monitor,放到/etc/cron.d/目錄下,文件權限644,否則BAD FILE MODE。

保留個空行,我自己調試的時候,沒空行的情況會不執行。

> /dev/null 2>&1 表示標准輸出流和標准錯誤流會被重定向到/dev/null,如果不加這一句,會報沒有權限。
(CRON) EXEC FAILED (/dev/null): Permission denied
 
提高檢測頻率,10s一次:
* * * * * root  /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1
* * * * * root  sleep 10 && /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1
* * * * * root  sleep 20 && /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1
* * * * * root  sleep 30 && /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1
* * * * * root  sleep 40 && /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1
* * * * * root  sleep 50 && /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1

 

八、查看所有用戶的crontab任務

cat /etc/passwd | cut -f 1 -d : |xargs -I {} crontab -l -u {}

 


附錄: 
 
讓Linux下的cron以秒為單位執行shell腳本的3種方法: http://www.jb51.net/article/56435.htm
crontab 解決周期內未執行完重復執行 :http://blog.csdn.net/phachon/article/details/52106409
/etc/crontab文件和crontab -e命令區別 : http://www.cnblogs.com/xd502djj/p/4292781.html
cron配置 https://www.cnblogs.com/shuaiqing/p/7742382.html

linux單進程服務保活supervise

關於linux服務器進程監控及自動重啟的簡單方案 : http://blog.csdn.net/ljxfblog/article/details/40362229

http://blog.chinaunix.net/uid-26588712-id-3196464.html

https://yq.aliyun.com/articles/47001
bash: /dev/null: Permission denied , Why???? :http://www.linuxforums.org/forum/newbie/27030-bash-dev-null-permission-denied-why.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM