cron定时任务

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
上一篇
下一篇