Linux 设置 cron 定时任务

简介

linux定时任务分为两种:

第一种,是系统自身轮训的任务,比如定时(5天或者一周)备份/var/log/message等日志文件。 

第二种,是用户执行的定时任务(用户的定时任务一般分为六段)


at适合执行一次就结束的调度任务

anacrontab适合于非7*24小时开机的服务器准备的,是以天为单位执行的,不能指定以分钟的定时任务,在停机期间没有任务执行,可以开机时执行。


cron 相关命令

cron 服务是一个定时执行的服务,而crond正是它的守护进程。可以通过crontab 命令添加或者编辑需要定时执行的任务。


cron 服务命令

systemctl start cron
systemctl stop cron
systemctl restart cron
systemctl status cron

以上1-4行分别为启动、停止、重启服务和查看服务状态


设置 cron 开机自动启动

cron 服务是Linux的内置服务,但它不会开机自动启动,可以每分钟执行任务

vi /etc/rc.local
/bin/systemctl start crond.service


crontab 操作

crontab -u //设定某个用户的cron服务
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务
crontab -i //打印提示,输入yes等确认信息


相关文件

/var/spool/cron/root  (以用户命名的文件) 是所有默认存放定时任务的文件
/etc/cron.deny        该文件中所列出用户不允许使用crontab命令
/etc/cron.allow       该文件中所列出用户允许使用crontab命令,且优先级高于/etc/cron.deny
/var/log/cron         该文件存放cron服务的日志


基本格式

# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

定时任务的每段为:分,时,日,月,周,用户,命令

第1列表示分钟1~59 每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令


*:表示任意时间都,实际上就是“每”的意思。可以代表00-23小时或者00-12每月或者00-59分

-:表示区间,是一个范围,00 17-19 * * * cmd,就是每天17,18,19点的整点执行命令

,:是分割时段,30 3,19,21 * * * cmd,就是每天凌晨3和晚上19,21点的半点时刻执行命令

/n:表示分割,可以看成除法,*/5 * * * * cmd,每隔五分钟执行一次


Linux 本身不支持秒级定时,要实现的话可以定时运行一个脚本(例如每分钟执行一次),这个脚本的内容其实是一个死循环执行代码,也就是一直执行



例子

实例1:每1分钟执行一次command

* * * * * command

 

实例2:每小时的第3和第15分钟执行

3,15 * * * * command

 

实例3:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * command

 

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2 * * command

 

实例5:每个星期一的上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 command

 

实例6:每晚的21:30重启smb 

30 21 * * * /etc/init.d/smb restart

 

实例7:每月1、10、22日的4 : 45重启smb 

45 4 1,10,22 * * /etc/init.d/smb restart

 

实例8:每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

 

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb 

0,30 18-23 * * * /etc/init.d/smb restart

 

实例10:每星期六的晚上11 : 00 pm重启smb 

0 23 * * 6 /etc/init.d/smb restart

 

实例11:每一小时重启smb 

* */1 * * * /etc/init.d/smb restart

 

实例12:晚上11点到早上7点之间,每隔一小时重启smb 

* 23-7/1 * * * /etc/init.d/smb restart

 

实例13:每月的4号与每周一到周三的11点重启smb 

0 11 4 * mon-wed /etc/init.d/smb restart

 

实例14:一月一号的4点重启smb 

0 4 1 jan * /etc/init.d/smb restart


实例15:执行 bash 脚本文件或 Node.js 文件

*/1 * * * * /opt/test/test.sh
*/1 * * * * /usr/local/bin/node /opt/test/test2.js



参考:

https://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

https://www.cnblogs.com/p0st/p/9482167.html

修改时间 2023-12-07

声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
真诚赞赏,手留余香
赞赏
随机推荐
WordPress 按自定义排序的两种方法
JavaScript 代码混淆加密工具 javascript-obfuscator
WordPress 增强编辑器功能
Git 放弃本地修改,强制和之前的某次提交同步
Node.js 控制台进度条实现原理
HTML 对话框元素 dialog
如何使用 Photoshop 绘画像素风格图片
MySQL 数据库中货币单位如何存储