linux内置了cron进程,cron搭配shell脚本,就可以完成特定的需求,有定时任务的效果。
crontab指令即cron table的简写,相关的配置文件目录如下:
- /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
- /etc/crontab 这个文件负责调度各种管理和维护任务。
- /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
- 还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次。
crontab [-u username] //省略用户表表示操作当前用户的crontab
-e (编辑工作表)
-l (列出工作表里的命令)
-r (删除工作作)
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
Options:
-u <user> define user
-e edit user's crontab
-l list user's crontab
-r delete user's crontab
-i prompt before deleting
-n <host> set host in cluster to run users' crontabs
-c get host in cluster to run users' crontabs
-s selinux context
-x <mask> enable debugging
1、安装
yum install cronie
service crond start //启动服务
service crond restart //重启服务
service crond stop //关闭服务
service crond reload //重新加载服务
service crond status //查看状态
cron进程是linux中的守护进程,在系统后台运行2.linux的crontab服务默认每隔一分钟去读取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面所有的内容3.编辑crontab文件后系统会自动存放在/var/spool/cron/目录中。
1、指令
- 查看当前用户的定时任务
crontab -l
- 查看指令用户的定时任务
crontab -l -u root
- 查看系统所有用户的
cat /etc/passwd |cut -f 1 -d : |xargs -I {} crontab -l -u {}
- 删除当前的定时任务
crontab -r
- 新增或编辑定时任务
crontab -e
- 查看支持的环境变量
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root #发送邮件到账号
2、cron的语法
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
星号(*):通配符匹配,代表所有可能的值。例如:在小时字段中,一个星号等同于每个小时;在月份字段中,一个星号则等同于每月逗号(,):在一个字段上指定多个值。例如:“1,2,5,7,8,9”中杠(-):指定一个值得范围。例如:“2-6”表示“2,3,4,5,6”正斜线(/):指定时间的间隔频率。例如:“0-23/2”表示每两小时执行一次
crontab的特殊字符:
linux中提供了8个特殊字符串用来替代crontab命令的前五个字段,这样不但可以节省时间,还可以提高可读性。
特殊字符 含义
@reboot 在每次启动时运行一次
@yearly 每年运行一次,例如:“0 0 1 1 *”
@annually 与@yearly用法一致
@monthly 每月运行一次,例如:“0 0 1 * *”
@weekly 每周运行一次,例如:“0 0 * * 0”
@daily 每天运行一次,例如:“0 0 * * *”
@midnight 与@daily用法一致
@hourly 每小时运行一次,例如:“0 * * * *”
实例1:每1分钟执行一次myCommand
* * * * * myCommand
实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand
实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * myCommand
实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
实例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
0 */1 * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
0 23-7/1 * * * /etc/init.d/smb restart
3、crontab发送邮件
发送到外部邮箱,以qq邮箱为例
在cat /etc/crontab将MAILTO=root 修改为你需要的外部邮箱账号
且在crontab -e 的第一行添加MAILTO=外部邮箱账号
并且配合linux发送邮件文章使用
4、任务日志查询
任务是否执行查询
在/var/log/目录下有cron开头的文件, 里面包含了crontab的执行记录
Feb 19 10:19:01 zdc CROND[8314]: (root) CMD (/root/date.sh)
Feb 19 10:20:01 zdc CROND[8390]: (root) CMD (/root/date.sh)
Feb 19 10:21:01 zdc CROND[8440]: (root) CMD (/root/date.sh)
Feb 19 10:22:01 zdc CROND[8487]: (root) CMD (/root/date.sh)
Feb 19 10:23:01 zdc CROND[8544]: (root) CMD (/root/date.sh)
荐将任务写成脚本, 在其中添加执行成功失败之类的输出逻辑,自定义输出到指定文件中 如
date >> /root/date1
echo "成功" >> /root/date1
1
2
任务是否出错判断
当任务执行过程中报错后,会给当前用户发送邮件,默认情况下在/var/spool/mail 中的对应用户文件下
您在 /var/spool/mail/root 中有新邮件
...
X-Cron-Env: <XDG_SESSION_ID=4303>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/0>
X-Cron-Env: <LANG=zh_CN.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20210222015652.48902109F2CC@mail.qq.com>
Date: Fri, 19 Feb 2021 10:31:02 +0800 (CST)
/root/date.sh:行3: success: 未找到命令
https://www.cnblogs.com/My-IronMan/p/15703884.html