定时任务
1 | sudo service cron reload |
每五分钟执行 */5 * * * *
每小时执行 0 * * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *
Linux下crontab的使用
1.作用
使用crontab命令可以修改crontab配置文件,然后该配置由cron公用程序在适当的时间执行,该命令使用权限是所有用户。
2.格式
crontab [-u user] {-l | -r | -e}
3.主要参数
-e:执行文字编辑器来设定时程表,内空的文字编辑器是vi
-r:删除目前的时程表
-l列出目前的时程表。
Crontab文件的格式为”M H D m d cmd”。其中,M代表分钟(059),H代表小时(023),D代表天(131),m代表月(112),d代表一星期内的天(0~6,0为星期天)。Cmd表示要运行的程序,它被送入sh执行,这个shell只有USER、HOME、SHELL三个环境变量。
使用cron服务,用server crond status查看cron服务状态,如果没有启动则service crond start启动它,cron服务是一个定时执行的服务,可以通过crontab命令添加或编辑需要定时执行的任务:
crontab –u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab –l //列出某个用户cron服务的详细内容
crontab –r //删除某个用户的cron服务
crontab –e //编辑某个用户的cron服务
crontab filename //以filename作为crontab的任务列表文件并载入
比如说root查看自己的cron设置:crontab –u root –l
再例如,root想删除fred的cron设置:crontab –u fred –r
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab –u root –e
进入vi编辑模式,编辑的内容一定要符合下面的格式:
*/1 * * * * ls >>/tmp/ls.txt
编辑/etc/crontab文件,在末尾加上一行:30 5 * * * root init 6这样就将系统配置为每天早上5点30分自动重新启动。
crontab 文件中的行由6个字段组成,不同字段间用空格或tab键分隔。前5个字段指定命令要运行的时间
分钟(0-59)
小时(0-23)
日期(1-31)
月份(1-12)
星期几(0-6,其中0代表星期日,好像7也代表星期日)
第6个字段是一个要在适当时间执行的字符串。
例子:
1 | #MIN HOUR DAY MONTH DAYOFWEEK COMMAND |
补充:在使用crontab的时候,要特别注意的是运行脚本中能够访问到的环境变量和当前测试环境中环境变量未必一致,一个比较保险的做法是在运行的脚本程序中自行设置环境变量(export)
(1) 先建一个文件crond.txt如下,每天早上5点36分重新启动
36 5 * * * reboot
(2)上传到/opt目录
(3)运行命令
crontab /opt/crond.txt
crontab –l
让配置文件生效:如果让配置文件生效,还得重新启动cron,切记,既然每个用户下的cron配置文件修改后,也要重新启动cron服务器。
在Fedora和Redhat中,我们应该用:
/etc/rc.d/crond restart
如果让crond在开机时运行,应该改变其运行级别:
chkconfig –level 35 crond on
service crond status查看cron服务状态,如果没有启动则service crond start启动它,cron服务是一个定时执行的服务,可以通过crontab命令添加或者编辑需要定时执行的任务
/etc/crontab文件和crontab -e命令区别
1、格式不同
前者
1 | # For details see man 4 crontabs |
后者
1 | #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
1、crontab 会进行语法检查,vi 不会
2、听说有些 os 的 crond 不会重读配置,所以用 service 重启
crontab -e是某个用户的周期计划任务;
/etc/crontab是系统的周期任务
crontab -e 与 /etc/crontab 修改语法格式不一样,后者多一个 user 指定
不管用 crontab -e or 改 /etc/crontab 都不需要重新启动 crond 服务
01 22 * * * /sbin/shutdown -h now
执行的结果都是一样, 一般LINUX 都用shutdown -h now 也可以init 0,init 0在UNIX用得比较多,关机需要root的身份在可以执行:
方法1:换到root 的身份,su - root,crontab -e (按a增加下),01 22 * * * /sbin/shutdown -h now (或01 22 * * * /sbin/init 0),保存退出即可
方法2:vi /etc/crontab 在里面插入,01 22 * * * root /sbin/shutdown -h now或 01 22 * * * root /sbin/init 0
crontab -e 是针对用户的cron来设计的,如果是系统的例行性任务,则不需要以crontab -e来管理例行性命令,只需要编辑/etc/crontab文件就可以了。需要注意的是:crontab -e的作用其实是/usr/bin/crontab这个执行文件,但是/etc/crontab是个纯文本文件,可以root的身份编辑这个文件。
基本上,cron服务的最低检测时间单位是分钟,所以cron会每分钟读取一次/etc/crontab与/var/spool/cron中的数据内容,因此,只要编辑完/etc/crontab文件并且保存之后,crontab时设定就会自动执行。
注意:在linux下的crontab会自动每分钟重新读取一次/etc/crontab的例行工作事项,但是某些原因或在其他的unix系统中,由于crontab是读到内存中,所以在您修改完/etc/crontab之后可能并不会马上执行,这时请重新启动crond服务:/etc/rc.d/init.d/crond restart
本文作者: NUK
最后更新: 2023年12月13日 17:35:03
本文链接: http://www.uilucky.com/post/9575ed81.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!