pexels-anastasia-yudin-5167249.jpg

主理人序

📢博主的服务器运行着为数不多的数十个脚本(Shell script),以实现一些想要的功能,如:定时检测lnmp服务状态、网站的status并在出现故障时通过TG机器人通知预警、以及系统负载检测,异常IP处理;等等;

Crontab 是什么

工具型软件cron是一款类Unix的操作系统下的基于时间的任务管理系统。用户们可以通过cron在固定时间、日期、间隔下,运行定期任务(可以是命令和脚本)。cron常用于运维和管理,但也可用于其他地方,如:定期下载文件和邮件。cron该词来源于希腊语chronos(χρόνος),原意是时间。
通常,任务时间表(crontab)文件储存的指令被crond守护进程激活,守护进程在后台运行,并每一分钟检查是否有定期的作业需要执行。这类作业一般称为cron jobs。
via 维基百科

提交、编辑、列出或删除 cron 作业。

Crontab 安装

正常情况下,各类VPS或云主机都会自带的,如需新安装可使用下方命令;(特指 Ubuntu server)

Ubuntu server

$ apt-get install cron

Crontab 常用命令

$ crontab -e #编辑配置文件以设置定时执行任务
$ crontab -l #查看配置文件都有哪些任务
$ service cron reload #重新加载配置文件
$ service cron start #启动
$ service cron restart #重启
$ service cron status #查看目前在执行的任务及其状态

配置文件格式

/var/spool/cron/下的任务时间表(crontab)文件是用户层次的,/etc/crontab/etc/cron.d/目录下的任务时间表(crontabs)文件是系统层次的;格式如下:

# 文件格式說明
*    *    *    *    * 紧跟被执行的命令
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

举例:每10分钟执行一次

*/10 * * * * bash /home/cpucheck.sh;

Cron 表达式

Cron表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样),表示一组时间,通常作为执行某个程序的时间表。需注意的是,Linux Crontab 最小调度单位是「分钟」,没法控制到「秒」;

其他表达式

在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup:

0 */2 * * * /sbin/service httpd restart  意思是每两个小时重启一次apache 
50 7 * * * /sbin/service sshd start  意思是每天7:50开启ssh服务 
50 22 * * * /sbin/service sshd stop  意思是每天22:50关闭ssh服务 
0 0 1,15 * * fsck /home  每月1号和15号检查/home 磁盘 
1 * * * * /home/bruce/backup  每小时的第一分执行 /home/bruce/backup这个文件 
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;  每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls  意思是每月的1、11、21、31日是的6:30执行一次ls命令
0 6-12/3 * 12 * /usr/bin/backup;

via Linux crontab 命令

以上。

cron 执行日志

Crontab 的执行日志一般在 /var/log/cron,如果你是 Ubuntu server 20.04lts 则 Crontab 执行日志在 /var/log/syslog

$ tail -f /var/log/cron
$ tail -f /var/log/syslog
Jul 14 22:35:01 localhost CRON[2287943]: (root) CMD (/home/ddos/protect.sh;)
Jul 14 22:35:01 localhost CRON[2287945]: (root) CMD (/home/cf.challenge.sh;)

cron 配置文件备份

使用 crontab -l 命令就可列出当前 crontab 配置文件内容,可使用如下完整命令备份到指定文件(TXT或其他);

crontab -l > /home/my_crontab.backup

附注

最后修改:2021 年 11 月 16 日 11 : 22 AM