1. 程式人生 > >ubuntu 使用cron設置定時啟動任務

ubuntu 使用cron設置定時啟動任務

rest linux 一周 值範圍 con csdn 回收 world man

介紹

cron,是一個Linux定時執行工具,可以在無需人工幹預的情況下運行作業。
在Ubuntu server 下,cron是被默認安裝並啟動的;如果沒有啟動,自行設置並啟動(chkconfig\sysv-rc-conf)。

通過其配置文件 /etc/crontab 可以看到以下內容:

技術分享圖片

ununtu 通過調用 run-parts 命令,定時運行四個目錄下的所有腳本。
1)/etc/cron.hourly,目錄下的腳本會每個小時讓執行一次,在每小時的17分鐘時運行;
2)/etc/cron.daily,目錄下的腳本會每天讓執行一次,在每天的6點25分時運行;
3)/etc/cron.weekly,目錄下的腳本會每周讓執行一次,在每周第七天的6點47分時運行;
4)/etc/cron.mouthly,目錄下的腳本會每月讓執行一次,在每月1號的6點52分時運行;
當然,以上的時間均是系統默認時間,可以根據自己的需求進行修改。

cron 服務的啟動與停止

cron是被默認安裝並啟動的。而 ubuntu 下啟動,停止與重啟cron,均是通過調用/etc/init.d/中的腳本進行。命令如下

啟動:sudo /etc/init.d/cron start 關閉:sudo /etc/init.d/cron stop
重啟:sudo /etc/init.d/cron restart 重新載入配置:sudo /etc/init.d/cron reload
可以用ps aux | grep cron命令查看cron是否已啟動

也可以通過如下命令

/usr/sbin/service crond start // 啟動服務
/usr /sbin/service crond stop //
關閉服務 /usr/sbin/service crond restart // 重啟服務 /usr /sbin/service crond reload // 重新載入配置

查看cron是否在運行

pgrep cron

設置cron運行日誌存放路徑

1.修改rsyslog文件

1 sudo vi /etc/rsyslog.d/50-default.conf 

將#cron.* 前的 # 刪掉;

技術分享圖片

重啟rsyslog服務

sudo service rsyslog restart

重啟cron服務

sudo service cron restart 

查看日誌文件

tail -f /var/log/cron.log

cron 文件語法

 1 語法如下:
 2 Minute Hour Day Month Dayofweek command
 3 分鐘 小時 天 月 天每星期 命令
 4 每個字段代表的含義及取值範圍如下:
 5 Minute :分鐘(0-59),表示每個小時的第幾分鐘執行該任務
 6 Hour : 小時(1-23),表示每天的第幾個小時執行該任務
 7 Day : 日期(1-31),表示每月的第幾天執行該任務
 8 Month : 月份(1-12),表示每年的第幾個月執行該任務
 9 DayOfWeek : 星期(0-6,0代表星期天),表示每周的第幾天執行該任務
10 Command : 指定要執行的命令(如果要執行的命令太多,可以把這些命令寫到一個腳本裏面,然後在這裏直接調用這個腳本就可以了,調用的時候記得寫出命令的完整路徑)
11 在這些字段裏,除了“Command”是每次都必須指定的字段以外,其它字段皆為可選字段,可視需要決定。對於不指定的字段,要用“*”來填補其位置。同時,cron支持類似正則表達式的書寫,支持如下幾個特殊符號定義:
12 “ * ” ,代表所有的取值範圍內的數字;
13 ” / “, 代表”每”(“*/5”,表示每5個單位);
14 ” – “, 代表從某個數字到某個數字(“1-4”,表示1-4個單位);
15 ” , “, 分開幾個離散的數字;
16 段 含義 取值範圍
17 第一段 代表分鐘 0—59
18 第二段 代表小時 0—23
19 第三段 代表日期 1—31
20 第四段 代表月份 1—12
21 第五段 代表星期幾,0代表星期日 0—6 

舉例如下:

5 * * * * ls // 指定每小時的第5分鐘執行一次ls命令 30 5 * * * ls // 指定每天的 5:30 執行ls命令
30 7 8 * * ls // 指定每月8號的7:30分執行ls命令 50 7 * * * root
run-parts/etc/cron.daily // 每天7:50以root 身份執行/etc/cron.daily目錄中的所有可執行文件

技術分享圖片

新增 cron 任務

推薦使用crontab -e命令添加自定義的任務(編輯的是/var/spool/cron下對應用戶的cron文件,在/var/spool/cron下的crontab文件 不可以直接創建或者直接修改,crontab文件是通過crontab命令得到的)。

crontab -e

1)直接執行命令行
每2分鐘打印一個字符串“Hello World”,保存至文件/home/laigw/cron/HelloWorld.txt中,cron 格式如下:
/2 * * * echo “Hello World.” >> /home/HelloWorld.txt
2)shell 文件
每3分鐘調用一次 /home/laigw/cron/test.sh 文件,cron 格式如下:
/3 * * * /home/laigw/cron/test.sh
文件 /home/laigw/cron/test.sh 的內容如下:
———————————————————————————————————————–
1
2
3

!/bin/sh

cd /home/laigw/cron
echo “shell” >> shell.txt
———————————————————————————————————————–
3)php 文件
php 文件需要增加命令行 “#!/usr/local/php/bin/php”,其 “/usr/local/php/bin/php” 的意思是,需要引入PHP程序安裝目錄下的/bin/php 文件(該ubuntu系統中,PHP程序的安裝目錄是/usr/local/php),而這種引入文件的處理方式有兩種。
a. 在 php 文件中引入命令行(推薦使用),cron 的格式如下:
/1 * * * /home/laigw/cron/test.php
文件 /home/laigw/cron/test.php 的內容如下:
———————————————————————————————————————–
1

!/usr/local/php/bin/php

———————————————————————————————————————–
註: 需要把test.php文件賦予可執行權限:# chmod +x test.php
b. 在寫 cron 任務時引入命令行,cron 的格式如下:
/1 * * * /usr/local/php/bin/php /home/laigw/cron/test.php
文件 /home/laigw/cron/test.php 的內容如下:
———————————————————————————————————————–
———————————————————————————————————————–
註: 需要把test.php文件賦予可執行權限:# chmod +x test.php
5. 其他
/var/spool/cron/ 該目錄下存放所有用戶的cron服務
/var/log/cron 記錄cron運行的日誌信息
6. 一個超級用戶的 crontab
1
2
3
4
5

Run the ‘atrun’ program every minutes

#This runs anything that’s due to run from ‘at’.See man ‘at’ or ‘atrun’.
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun
40 7 * * * updatedb
8,10,22,30,39,46,54,58 * * * * /bin/sync

7. 例子
●30 5 * * * root /sbin/init 6 這樣就將系統配置為了每天早上5點30自動重新啟動。
● 0 /2 * * /sbin/service httpd restart 意思是每兩個小時重啟一次apache
● 50 7 * * * /sbin/service sshd start 意思是每天7:50開啟ssh服務
● 50 22 * * * /sbin/service sshd stop 意思是每天22:50關閉ssh服務
● 0 0 1,15 * * fsck /home 每月1號和15號檢查/home 磁盤
● 1 * * * * /home/bruce/backup 每小時的第一分執行 /home/bruce/backup這個文件
● 00 03 * * 1-5 find /home “.xxx” -mtime +4 -exec rm {} /; 每周一至周五3點鐘,在目錄/home中,查找文件名為.xxx的文件,並刪除4天前的文件。
● 30 6 /10 * ls 意思是每月的1、11、21、31日是的6:30執行一次ls命令
12 3 * * * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1
這條語句將在每天的淩晨3點12分(03:12)運行 tar czf /usr/local/backups/daily/etc.tar.gz /etc 命令。>> /dev/null 2>&1 表示把所有標準輸出發送到 /dev/null(linux的回收站),把標準錯誤輸出(2)發送到和標準輸出(1)同樣的地方(即 /dev/null)。運行這行命令將不會產生任何輸出。
這條語句可以變得稍微復雜一點:
30 15 13 6 1 * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1
它將在6月13日周一的15:30運行 tar czf /usr/local/backups/daily/etc.tar.gz /etc 命令。
以下語句可以達到同樣的效果:
30 15 13 Jun Mon * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1
如果你想以用戶joey的身份每小時的第15分鐘運行某個程序,可以使用:
15 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1
其中的星號(*)是通配符,表示cron將忽略這個字段。
如果你想每兩小時就運行某個程序,可以在小時字段裏使用 */2。它將會在2點,4點,6點……22點,24點運行。具體語句如下:
0 /2 * * joey /usr/bin/somecommand >> /dev/null 2>&1
cron語句中還可以使用逗號(,)來指定多個時間。例如你想在每小時的15分和30分運行某個程序,可以在分鐘字段使用 15,3015,30 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1
如果你想在每月的第一周(即1號到7號)每天的指定時間運行某個程序,可以在日期字段使用 1-715,30 /2 1-7 * joey /usr/bin/somecommand >> /dev/null 2>&1
這條語句將在每月的第1-7日每兩小時的15分和30分(02:15,02:30……22: 15,22:30等)運行 /usr/bin/somecommand 命令。
如果你想在每天的16:18執行一個腳本集合,可以把所有要執行的腳本放到一個目錄中(如 /home/username/cron),可以使用:
18 16 * * * root run-parts /home/username/cron >> /dev/null 2>&1
如果你想保存某個程序的輸出結果, 可以把 >> /dev/null 2>&1 替換為 >> 

如果使用sh腳本還需修改sh腳本的權限 chmod +x /…/…/test.sh

參考地址:http://blog.csdn.net/LOUISLIAOXH/article/details/48242289

ubuntu 使用cron設置定時啟動任務