Heim  >  Artikel  >  Backend-Entwicklung  >  Geplante Ausführung von Ubuntu-Cron-Aufgaben

Geplante Ausführung von Ubuntu-Cron-Aufgaben

不言
不言Original
2018-04-04 14:57:022522Durchsuche


cron ist ein geplantes Linux-Ausführungstool, das Jobs ohne manuelle Eingriffe ausführen kann.

1. Über crontab

Unter Ubuntu-Server wird cron standardmäßig installiert und gestartet. Über die Datei /etc/crontab können Sie den folgenden Inhalt sehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# /etc/crontab: system-wide crontab# Unlike any other crontab you don’t have to run the `crontab’# command to install the new version when you edit this file# and files in /etc/cron.d. These files also have username fields,# that none of the other crontabs do. SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 # m h dom mon dow user command17 * * * * root cd / && run-parts –report /etc/cron.hourly25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.daily )47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.weekly )52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.monthly )#

——————————————————————————————————————–
ununtu führt regelmäßig alle Skripte in den vier Verzeichnissen aus, indem es den Befehl run-parts aufruft.
1) /etc/cron.hourly, das Skript im Verzeichnis wird einmal pro Stunde ausgeführt und läuft jede Stunde alle 17 Minuten;
2) /etc/cron.daily, das Skript im Verzeichnis wird ausgeführt wird einmal täglich um 6:25 Uhr jeden Tag ausgeführt.
3) /etc/cron.weekly, das Skript im Verzeichnis wird einmal pro Woche um 6:47 Uhr am siebten Tag jeder Woche ausgeführt ;
4) /etc/cron.mouthly, das Skript im Verzeichnis wird einmal im Monat, am 1. eines jeden Monats, ausgeführt.
Natürlich sind die oben genannten Zeiten die Systemstandards Die Zeit kann entsprechend Ihren eigenen Bedürfnissen geändert werden.

2. Starten und Stoppen des Cron-Dienstes

Unter Ubuntu 9.10 ist Cron standardmäßig installiert und gestartet. Das Starten, Stoppen und Neustarten von Cron unter Ubuntu erfolgt durch den Aufruf des Skripts in /etc/init.d/. Der Befehl lautet wie folgt:
1) /sbin/service crond start // Dienst starten
2) /sbin/service crond stop // Dienst schließen
3) /sbin/service crond restart / / Starten Sie den Dienst neu
4)/sbin/service crond reload // Laden Sie die Konfiguration neu
Sie können mit dem folgenden Befehl überprüfen, ob cron ausgeführt wird (wenn es ausgeführt wird, wird eine Prozess-ID zurückgegeben):
# pgrep cron

3. crontab

Der Befehl crontab wird zum Installieren, Löschen oder Auflisten der Tabellen verwendet, die zur Steuerung des Cron-Hintergrundprozesses verwendet werden. Mit anderen Worten: Benutzer fügen die Befehlsfolge, die ausgeführt werden muss, zur Ausführung in die Crontab-Datei ein. Jeder Benutzer kann seine eigene Crontab-Datei haben. Im Folgenden sind einige Parameter und Beschreibungen dieses Befehls aufgeführt:
1) crontab -u // Cron-Dienst eines bestimmten Benutzers festlegen
2) crontab -l // Die Details des Cron-Dienstes eines bestimmten Benutzers auflisten
3) crontab -r // Den Cron-Dienst jedes Benutzers löschen
4) crontab -e // Den Cron-Dienst eines bestimmten Benutzers bearbeiten

参数名称 含义 示例
-l 显示用户的Crontab文件的内容 crontabl –l
-i 删除用户的Crontab文件前给提示 crontabl -ri
-r 从Crontab目录中删除用户的Crontab文件 crontabl -r
-e 编辑用户的Crontab文件 crontabl -e

/etc/crontab文件语法如下:
Minute Hour Day Month Dayofweek command
分钟 小时 天 月 天每星期 命令
每个字段代表的含义及取值范围如下:
Minute :分钟(0-59),表示每个小时的第几分钟执行该任务
Hour : 小时(1-23),表示每天的第几个小时执行该任务
Day : 日期(1-31),表示每月的第几天执行该任务
Month : 月份(1-12),表示每年的第几个月执行该任务
DayOfWeek : 星期(0-6,0代表星期天),表示每周的第几天执行该任务
Command : 指定要执行的命令(如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径)
在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。同时,cron支持类似正则表达式的书写,支持如下几个特殊符号定义:
“ * ” ,代表所有的取值范围内的数字;
” / “, 代表”每”(“*/5”,表示每5个单位);
” – “, 代表从某个数字到某个数字(“1-4”,表示1-4个单位);
” , “, 分开几个离散的数字;

含义 取值范围
第一段 代表分钟 0—59
第二段 代表小时 0—23
第三段 代表日期 1—31
第四段 代表月份 1—12
第五段 代表星期几,0代表星期日 0—6

举例如下:

1
2
3
4
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目录中的所有可执行文件

4. 新增 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,30:

15,30 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1

如果你想在每月的第一周(即1号到7号)每天的指定时间运行某个程序,可以在日期字段使用 1-7:

15,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 替换为 >> /home/user/somecommand.log 2>&1 。

转自:http://blog.enjoydiy.com/2011/10/415.html

相关推荐:

基于Spring的最简单的定时任务实现与配置之cron表达式的相关内容

PHP结合Linux的cron命令实现定时任务实例

Das obige ist der detaillierte Inhalt vonGeplante Ausführung von Ubuntu-Cron-Aufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn