操作系统定时任务
定时任务概念
可以固定一个时间,系统自动执行某个脚本/命令
定时任务可代替人工自动完成一下任务定时任务常用场景
1.时间信息同步操作
2.规划一个不忙的时间进行备份操作定时任务可实现的方法
1.cronie 常用定时任务软件,默认系统已安装可灵活设置时间
2.atd 只能执行一次无法长期生效
3.anacron 不适合服务器应用 系统默认固定定时时间,只能按固定时间执行系统默认定时任务文件
不需要自己进行设置时间 系统规定了时间
1./etc/cron.hourly每小时执行目录中的脚本
2./etc/cron.daily每天固定时间执行目录中脚本文件
3./etc/cron.weekly每周固定时间执行目录中脚本文件
4./etc/cron.monthly每月固定时间执行目录中脚本文件
配置定时任务
定时任务主要关联 一个任务,两个文件
命令crontab设置和查看定时任务
语法crontab 参数
参数:
-l查看设置的定时任务
-e编辑定时任务 自带语法检查功能定时任务配置文件
/var/log/cron定时任务日志文件
/var/spool/cron/用户名xx用户设置定时任务配置文件准备工作 查看自己的定时任务服务是否开启
systemctl status crond
临时开启systemctl start crond
永久开启systemctl enable crond定时任务编写格式介绍
cat /etc/crontab可以看到定时任务介绍
[root@zin ~]# cat /etc/crontab
SHELL=/bin/bash <--解释器
PATH=/sbin:/bin:/usr/sbin:/usr/bin <--默认只能识别这几个目录下的命令
MAILTO=root 可以使用脚本开头对PATH重新定量识别可更多命令
# For details see man 4 crontabs
# Example of job definition:
.---------------- minute (0 - 59) 第一个*代表分钟
| .------------- hour (0 - 23) 第二个*代表小时
| | .---------- day of month (1 - 31) 第三个*代表日期
| | | .------- month (1 - 12) 第四个*代表月份
| | | | .---- day of week (0 - 6) 第五个*代表星期
| | | | |
* * * * * user-name command to be executed
编写格式为前面写入时间 后面写入脚本/命令(尽量绝对路径书写)
定时任务编辑/常见错误
- 编辑定时任务
[root@zin ~]# crontab -e (进入定时任务编辑模式)
*/2 * * * * cp /etc/hosts /root/hosts &>/dev/null
(每隔两分钟将文件备份)
0 1-3 * * * sh /root/tar_jb &>/dev/null
(每天1点执行脚本并将成功错误信息都追加到/dev/null文件)
*/nn=几就是n时执行一次
连续时间可以用n-m来连接
不连续的行可以用n,m连连接
dev/null黑洞文件 不占用地方
- 小问题一
当postfix邮件服务开启时 定时任务的报错信息会发送到/var/spool/mail/用户名文件内 block资源会被消耗
当postfilx邮件服务关闭时 定时任务产生的报错信息会发送到/var/spool/postfix/maildrop/目录下产生大量的小文件 大量占用inode资源
解决办法 将定时任务的成功和报错都追加到/dev/null黑洞下 - 小问题
定时任务无法识别某些特殊符号
解决 方法一 在特殊符号前加上转义符\方法二利用脚本进行定时任务
定时任务主要事项
定时任务编写注意事项:
- 编写定时任务需要有注释信息 (时间 编写人员 任务作用)
- 编写定时任务注意环境变量 命令书写为绝对路径 (默认只识别/bin或/usr/bin目录下命令)
- 编写定时任务注意特殊符号 需要标记转义符号
\ - 编写定时任务需要将输出信息定义到空
&>/dev/null - 编写定时任务建议使用脚本编写
- 脚本主要事项
- 编写后在测试机测试确保可用
- 放入定时任务时以绝对路径进行写入
- 调整系统时间进行测试
- 检查定时任务日志
/var/log/cron和任务的执行结果