Centos定製任務Crontab文件

這個文章忘了抄的誰的了,在電腦看見了就發出來了!!

前言
工作中需要開啓一個定時任務:每天晚上2點進行爬蟲代碼的運行,這不得不去學習一下linux 下的定時任務crontab

crontab
yum install crontabs

說明:
/sbin/service crond start //啓動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啓服務
/sbin/service crond reload //重新載入配置
查看crontab服務狀態:service crond status
手動啓動crontab服務:service crond start
查看crontab服務是否已設置爲開機啓動,執行命令:ntsysv
加入開機自動啓動:
chkconfig crond on

1,crontab命令
功能說明:設置計時器。
語  法:crontab [-u <用戶名稱>][配置文件] 或 crontab [-u <用戶名稱>][-elr]

補充說明:cron是一個常駐服務,它提供計時器的功能,讓用戶在特定的時間得以執行預設的指令或程序。只要用戶會編輯計時器的配置文件,就可以使 用計時器的功能。

其配置文件格式如下:
Minute Hour Day Month DayOFWeek Command

參  數:
-e  編輯該用戶的計時器設置。
-l  列出該用戶的計時器設置。
-r  刪除該用戶的計時器設置。
-u<用戶名稱>  指定要設定計時器的用戶名稱。

2,crontab 格式
基本格式 :

  •         command
    分 時 日 月 周  命令
    第1列表示分鐘1~59 每分鐘用或者 /1表示
    第2列表示小時1~23(0表示0點)
    第3列表示日期1~31
    第4列 表示月份1~12
    第5列標識號星期0~6(0表示星期天)
    第6列要運行的命令

    Use the hash sign to prefix a comment

    +—————- minute (0 – 59)

    | +————- hour (0 – 23)

    | | +———- day of month (1 – 31)

    | | | +——- month (1 – 12)

    | | | | +—- day of week (0 – 7) (Sunday=0 or 7)

    | | | | |

    * command to be executed

3,crontab文件的一些例子:
1 簡單打印

每天早上6點
0 6 * echo "Good morning." >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,因爲cron把任何輸出都email到root的信箱了。

每兩個小時
0 /2 echo "Have a break now." >> /tmp/test.txt

晚上11點到早上8點之間每兩個小時和早上八點
0 23-7/2,8 * echo "Have a good dream" >> /tmp/test.txt

每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點
0 11 4 * 1-3 command line

1月1日早上4點
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出現錯誤,或者有數據輸出,數據作爲郵件發給這個帳號 HOME=/

每小時執行/etc/cron.hourly內的腳本
01 root run-parts /etc/cron.hourly

每天執行/etc/cron.daily內的腳本
02 4 * root run-parts /etc/cron.daily

每星期執行/etc/cron.weekly內的腳本
22 4 0 root run-parts /etc/cron.weekly

每月去執行/etc/cron.monthly內的腳本
42 4 1 root run-parts /etc/cron.monthly

注意: "run-parts"這個參數了,如果去掉這個參數的話,後面就可以寫要運行的某個腳本名,而不是文件夾名。  

每天的下午4點、5點、6點的5 min、15 min、25 min、35 min、45 min、55 min時執行命令。
5,15,25,35,45,55 16,17,18 * command

每週一,三,五的下午3:00系統進入維護狀態,重新啓動系統。
00 15 1,3,5 shutdown -r +5

每小時的10分,40分執行用戶目錄下的innd/bbslin這個指令:
10,40 innd/bbslink

每小時的1分執行用戶目錄下的bin/account這個指令:
1 bin/account

每天早晨三點二十分執行用戶目錄下如下所示的兩個指令(每個指令以;分隔):
20 3 * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)  

每年的一月和四月,4號到9號的3點12分和3點55分執行/bin/rm -f expire.1st這個指令,並把結果添加在mm.txt這個文件之後(mm.txt文件位於用戶自己的目錄位置)。
12,55 3 4-9 1,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt

2 nginx示例

每晚的21:30重啓 nginx。

45 4 1,10,22 /etc/init.d/nginx restart
每月1、 10、22日的4 : 45重啓nginx。

10 1 6,0 /etc/init.d/nginx restart
每週六、週日的1 : 10重啓nginx。

0,30 18-23 * /etc/init.d/nginx restart
每天18 : 00至23 : 00之間每隔30分鐘重啓nginx。

0 23 6 /etc/init.d/nginx restart
每星期六的11 : 00 pm重啓nginx。

  • /1 /etc/init.d/nginx restart
    每一小時重啓nginx

  • 23-7/1 * /etc/init.d/nginx restart
    晚上11點到早上7點之間,每 隔一小時重啓nginx

0 11 4 * mon-wed /etc/init.d/nginx restart
每月的4號與每週一到週三 的11點重啓nginx

0 4 1 jan * /etc/init.d/nginx restart
一月一號的4點重啓nginx

/30 * /usr/sbin/ntpdate 210.72.145.20
每半小時同步一下時間

4 創建cron腳本
第一步:寫cron腳本文件,命名爲crontest.cron。
15,30,45,59 echo “xgmtest…..” >> xgmtest.txt 表示,每隔15分鐘,執行打印一次命令

第二步:添加定時任務。執行命令 “crontab crontest.cron”。搞定

第三步:”crontab -l” 查看定時任務是否成功或者檢測/var/spool/cron下是否生成對應cron腳本

將腳本改爲可執行(針對shell,.sh文件)
chmod +x filename

引用:

http://blog.csdn.net/u012402276/article/details/51063269
https://www.cnblogs.com/longjshz/p/5779215.html
http://blog.csdn.net/edgdvcyz/article/details/53348832

實現秒級別的定時任務

cat /etc/redhat-release //看操作系統版本

CentOS Linux release 7.4.1708 (Core)

一.使用延時來實現每N秒執行 原理:通過延時方法 sleep N 來實現每N秒執行。

寫個php文件

[php] view plain copy
$time = @date("Y-m-d H:i:s");
echo $time;
file_put_contents('text.txt',$time."\n",FILE_APPEND);
打開 crontab -e 編輯定時任務 每隔10秒執行一次

          • cd /www/dingshi/;php index.php
          • sleep 10; cd /www/dingshi/;php index.php
          • sleep 20; cd /www/dingshi/;php index.php
          • sleep 30; cd /www/dingshi/;php index.php
          • sleep 40; cd /www/dingshi/;php index.php
          • sleep 50; cd /www/dingshi/;php index.php

注意 php是你配置的環境變量 查看 tail -f /www/dingshi/text.txt

遇到的坑:

之前寫的是 * php /www/dingshi/index.php 等不知道爲什麼文本里就是沒內容,定時任務執行了但是沒有寫入, 權限,重啓定時任務都試了,
:就是沒寫入,但是在命令行 執行 php /www/dingshi/index.php 可以執行無語

後來改爲了 * cd /www/dingshi/;php index.php

二.編寫shell腳本實現 原理:在sh使用for語句實現循環指定秒數執行。

寫shell腳本執行php文件 將數據寫到文本

#!/bin/bash

step=10 #間隔的秒數,不能大於60

for (( i = 0; i < 60; i=(i+step) )); do
$(php 'php /www/dingshi/index.php')
sleep $step
done

exit 0
編輯定時 * /www/dingshi/crontab.sh

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