這個文章忘了抄的誰的了,在電腦看見了就發出來了!!
前言
工作中需要開啓一個定時任務:每天晚上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