cron定时任务
一、cron定时任务
1. 基本原理
# 每5秒向文本和屏幕输出一次时间
# for i in {1...10}; do
while [ 1-eq 1 ]; do
date "+%Y-%m-%d %H:%M:%S" >> /opt/learn/date.txt
date "+%Y-%m-%d %H:%M:%S"
sleep 5
done
2. cron指令
命令实例 | 作用 |
---|---|
crontab | 每个用户都有可以有一个crontab文件来保存调度信息,通过该指令运行任意一个shell脚本或者命令 |
/var/spool/cron | 保存所有用户的crontab文件 |
/etc/cron.deny/etc/cron.allow | 系统管理员可以通过cron.deny和cron。allow这两个文件来禁止或允许用户拥有自己的crontab文件(cron.allow需要自己新建) |
crontab的域 | * * * * * command 第一列 分钟0~59 第二列 小时0~23(0表示子夜) 第三列 日1~31 第四列 月1~12 第五列 星期0~6(0表示星期天) 第六列 要运行的命令 |
常用规则 | :匹配任何值 /n:匹配每n个单位(从其实值算起的每n个单位) x:匹配x x-y:匹配从x-y的值 x,y,z:只匹配x,y,z三个值 |
crontab[ -u user ] -e -l -r | -u:用户名 -e:编辑crontab文件 -l:列出crontab文件中的内容 -r:删除crontab文件 |
systemctl startl/stop crond | 启动停止crond进程,如crond进程停止,则不会有任务被自动执行 |
不发送邮件 | 在crontab -e中编辑任务时,在第一行添加:MAILTO="",则不会发送邮件 |
注意:编写定时任务时,确定好定时规则后,要执行的指令建议直接写在shell脚本中,让cron直接执行该脚本即可,尽量避免在定时规则文件中直接调用命令。
一定要确保shell脚本是有执行权限的,并且在cron文件中指定的是绝对路径。
二、其他命令
命令实例 | 作用 |
---|---|
at | 单次定时任务,yum installl at -y; systemctl start atd; |
at 时间 | 指定某一特定时间去做某事 |
at HH:MM | at 16:00 |
at HH:MM YYYY-MM-DD | at 16:00 2009-10-11 |
at now + 5 minutes | 从现在开始的5分钟后 |
如何退出at编辑模式 | Ctrl + D |
atq | 查询现有任务 |
atrm id | 删除某个任务 |
commmand & | 后台运行,如有输出,则会输出到前台 |
nuhup command & | 后台运行,所有输出将会转存到nohup.out文件中 |
sleep n | 让shell脚本暂停n秒 |
usleep n | 让shell脚本暂停n纳秒 |
time command | 极端某一个命令或者脚本运行时化的时间(精确到毫秒):如:time ls(ls这个命令所花费的时间) |
三、站点可用性监测
- 利用crontab来判断web服务器是否可用,如果不可用,则自动启动,并且将过程记录在日志中
-
一个站点无法访问,可能有两个原因
- web服务器没有正常启动:使用shell进行判断
使用curl直接访问对应网页,如果成功,则$?为0,否则非0 使用netstat -ant | grep :80进行查询,如果端口被打开,则$?为0,表示成功启动80端口 也可以使用ps -ef 查询对应进程
- 防火墙没有允许80端口通过:让shell执行firewall-cmd添加端口通过的命令即可
firewall-cmd --lisst-port | grep 80
-
完成上述特征的识别后,在shell中编写脚本,并让cron定时执行
curl http://192.168.112.188/ > /dev/null if [ $? -ne 0 ]; then /opt/lampp/lanpp start echo "检测到lampp没有启动,已经完成启动 - "
date "+%Y-%m-%d %H:%M:%S"
>> /opt/learn/sote-check.log fi firewall-cmd --list-port | grep 80 > /dev/null if [ $? -ne 0 ]; then firewall-cmd --add-port=80/tcp echo "检测到80端口没有通过,已经完成添加 - "date "+%Y-%m-%d %H:%M:%S"
>> /opt/learn/sote-check.log fi