Linux系统管理-定时任务
定时任务的服务名:crond
1.系统级别的定时任务
- 临时文件清理
- 系统信息采集
- 日志文件切割
2.用户级别的定时任务
- 定时向互联网同步时间
- 定时备份系统配置文件
- 定时备份数据库的数据
时间同步
yum install -y ntpdate
ntpdate(时间同步服务器)
[root@oldboy /tmp]
1 Jul 18:09:20 ntpdate[3141]: adjust time server 203.107.6.88 offset 0.001328 sec
定时任务的配置文件
命令的环境变量
[root@oldboy ~]
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
配置文件
[root@oldboy /tmp]
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
分 时 日 月 周
注意事项
- 每个定时任务请写上注释
- 在写定时任务的时候,所有命令一律使用绝对路径
- 注意有些命令是无法成功执行的 echo “123” >>/tmp/test.log &>/dev/null
- 定时任务的结尾一定要有&>/dev/null或者将结果追加重定向>>/tmp/date.log文件
- 将需要定期执行的任务写入Shell脚本中,避免直接使用命令无法执行的情况tar date
crond如何备份呢
- 通过查找/var/log/cron中执行的记录,去推算任务执行的时间
- 定时的备份/var/spool/cron/{username}
crond如何拒绝某个用户使用
[root@zls ~]
[oldboy@oldboy ~]$ crontab -e
You (oldboy) are not allowed to use this program (crontab)
See crontab(1) for more information
时间同步定时任务
crontab
-e:edit 编辑
-l:list 查看
-r:删除所有的定时任务
-u:指定用户创建定时任务或者查看定时任务,或者删除定时任务
[root@oldboy /tmp]
*/3 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null
[root@oldboy /tmp]
[root@oldboy /tmp]
*/3 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null
定时任务编写
crontab的时间编写规则
00 02 * * * ls
00 02 1 * * ls
00 02 14 2 * ls
00 02 * * 7 ls
00 02 * 6 5 ls
00 02 14 * 7 ls
00 02 14 2 7 ls
*/10 02 * * * ls
* * * * * ls
00 00 14 2 * ls
*/5 * * * * ls
00 02 * 1,5,8 * ls
00 02 1-8 * * ls
0 21 * * * ls
45 4 1,10,22 * * ls
45 4 1-10 * * ls
3,15 8-11 */2 * * ls
0 23-7/1 * * * ls
15 21 * * 1-5 ls
定时任务如何调试
1.crond调试
- 调整任务每分钟执行的频率, 以便做后续的调试。
- 如果使用cron运行脚本,请将脚本执行的结果写入指定日志文件, 观察日志内容是否正常。
- 命令使用绝对路径, 防止无法找到命令导致定时任务执行产生故障。
- 通过查看/var/log/cron日志,以便检查我们执行的结果,方便进行调试。
2.crond编写思路
- 1.手动执行命令,然后保留执行成功的结果。
- 2.编写脚本
- 脚本需要统一路径/scripts
- 脚本内容复制执行成功的命令(减少每个环节出错几率)
- 脚本内容尽可能的优化, 使用一些变量或使用简单的判断语句
- 脚本执行的输出信息可以重定向至其他位置保留或写入/dev/null
- 3.执行脚本
- 使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash)
- 执行脚本成功后,复制该执行的命令,以便写入cron
- 4.编写计划任务
- 加上必要的注释信息, 人、时间、任务
- 设定计划任务执行的周期
- 粘贴执行脚本的命令(不要手敲)
- 5.调试计划任务
- 增加任务频率测试
- 检查环境变量问题
- 检查crond服务日志
服务器发邮件
yum install -y mailx
[root@oldboy /tmp]
配置邮箱发邮件
[root@oldboys ~]
set from=295770347@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=295770347@qq.com
set smtp-auth-password=xxx
set smtp-auth=login
set smtp=smtps://smtp.qq.com:465
set ssl-verify=ignore
set nss-config-dir=/root/.certs
mkdir -p /root/.certs
cd /root/.certs
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs -i ~/.certs/qq.crt
echo '这是一封测试邮件' |mail -s 标题 295770347@qq.com
[root@oldboy /tmp]
[root@oldboy /tmp]
letter=`ls -1 /opt/loveletter/|head -1`
for qq in `cat /opt/qq.txt`;do
cat /opt/loveletter/$letter|mail -s 'this is a love letter' $qq
done
rm -f /opt/loveletter/$letter
[root@oldboy /tmp]
* * * * * /bin/sh /tmp/qingshu.sh &>/dev/null
|