Linux 定时任务与开机自启动管理
1 Linux 定时任务
Linux系统下定时执行shell脚本、Python脚本,Linux系统有一个定时任务的管理器crontab,我们只需要编辑定时任务,然后重启定时任务服务就好了。更本质的方法直接修改文件crontab: vim /etc/crontab,或者在/var/spool/cron/目录下。
Cron 表达式有七个必需字段,按空格分隔。
| 第一位 | 第二位 | 第三位 | 第四位 | 第五位 | 第六位 | 第七位 |
|---|---|---|---|---|---|---|
| 秒 | 分钟 | 小时 | 日 | 月 | 星期 | 年 |
其中,每个字段都有相应的取值范围:
| 字段 | 值 | 通配符 |
|---|---|---|
| 秒 | 0 - 59的整数 | , - * / |
| 分钟 | 0 - 59的整数 | , - * / |
| 小时 | 0 - 23的整数 | , - * / |
| 日 | 1 - 31的整数(需要考虑月的天数) | , - * / |
| 月 | 1 - 12的整数或 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC | , - * / |
| 星期 | 0 - 6的整数或 SUN,MON,TUE,WED,THU,FRI,SAT。其中0指星期日,1指星期一,以此类推 | , - * / |
| 年 | 1970 - 2099的整数 | , - * / |
通配符说明:
| 通配符 | 含义 |
|---|---|
| ,(逗号) | 代表取用逗号隔开的字符的并集。例如:在“小时”字段中 1,2,3 表示1点、2点和3点 |
| -(破折号) | 包含指定范围的所有值。例如:在“日”字段中,1 - 15包含指定月份的1号到15号 |
| * (星号) | 表示所有值。在“小时”字段中,* 表示每个小时 |
| / (正斜杠) | 指定增量。在“分钟”字段中,输入1/10以指定从第一分钟开始的每隔十分钟重复。例如,第11分钟、第21分钟和第31分钟,以此类推 |
Cron 表达式示例:
| 表达式 | 相关含义 |
|---|---|
*/5 * * * * * * | 表示每5秒触发一次 |
0 15 10 1 * * * | 表示在每月的1日的上午10:15触发 |
0 15 10 * * MON-FRI * | 表示在周一到周五每天上午10:15触发 |
0 0 10,14,16 * * * * | 表示在每天上午10点,下午2点,4点触发 |
0 */30 9-17 * * * * | 表示在每天上午9点到下午5点每半小时触发 |
0 0 12 * * WED * | 表示在每个星期三中午12点触发 |
注意:在 Cron 表达式中的“日”和“星期”字段同时指定值时,两者为“或”关系,即两者的条件分别均生效。
crontab -e
-u 指定用户
-l 列出用户任务计划
-r 删除用户任务
-e 编辑用户任务
s m h dom mon dow y command
second(s), minute(m), hour(h), day of month(dom), month(mon), day of week(dow), year(y)
一定要用绝对路径。否则可能会执行失败。
查看Python3路径:which python3
给该文件添加可执行的权限:chmod +x test.py
0 9 * * * /usr/bin/python3 /app/python/blog/test.py > /tmp/log/test.log
上面的记录是指每天9点整使用 /usr/bin/python3 执行 /app/python/blog/test.py 并将打印日志输出到 /tmp/log/test.log
编辑完成后重启服务:sudo service cron restart
2 统一集中管理系统cronsun,替代crontab
cronsun 是一个分布式任务系统,单个节点和 Linux 机器上的 crontab 近似。是为了解决多台 Linux 机器上 crontab 任务管理不方便的问题,当某个节点死机的时候可以自动调度到正常的节点执行。支持界面管理机器上的任务,支持任务失败邮件提醒,是替换 crontab 一个不错的选择。
3 linux下开机自启动服务的方式
用户自定义开机程序:vim /etc/rc.d/rc.local
touch /var/lock/subsys/local
python3 /service/test1/main.py -restart
python3 /tasks/test2/main.py -restart
python3 /tasks/test3.py -restart
python3 /tasks/test4.py -restart