测试网站:https://crontab.guru/(可以看到设定好后的各个执行时间点,大爱)
相关文件:
- /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
- /etc/crontab 这个文件负责调度各种管理和维护任务。
- /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
- 我们还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次。
- 日志:/var/log/cron
基本的语法:
* * * * * command
minute hour day month week command
分 时 天 月 星期 命令
特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
例:
分 时 天 月 星期 命令
* * * * * 每分钟执行一次
3 * * * * 每小时的第3分钟执行一次
*/5 * * * * 每5分钟执行一次 (会在5-10-15…执行,而不是刚创建好就执行)
1 */2 * * * 每隔2小时执行一次,24:01 2:01 4:01 ...执行
0 17 */2 * * 每隔2天执行一次,1号17点,3号17点,5号17点 ...执行
注:
* */1 * * * 并不是每小时执行一次,而是每分钟执行一次;
* */2 * * * 是开启定时任务后的2小时0、1…59分钟,4小时0、1…59分钟,6小时…执行一次
问题:使用crontab -e更新后,第一次执行时间会不会改变?
任务时间格式定好后什么时候执行就已经定死了,所以也就和更不更新/var/spool/cron/root文件没有关系了
运行脚本
command可以是一个脚本sh文件
sh文件包含了一系列操作
如:每隔1小时执行save_user.sh,并且日志导出到crontab_save_user.log文件中
0 */1 * * * /home/justaman/python/crontab_task/save_user.sh >> /home/justaman/python/log/crontab_save_user.log 2>&1
save_user.sh如下:
#!/bin/bash
echo "----------开始----------"# 启动虚拟环境
source /home/justaman/python/python_virtual/rss/bin/activate# 切换到程序运行目录
cd /home/justaman/python/code/rss/save_data/cnblog/get_user# 执行程序
/home/justaman/python/python_virtual/rss/bin/python3 user.py
注意:如果是用python脚本写入定时任务时,任务字符串后面必须加换行符" ",否则不会执行
编辑/查看定时任务
crontab –e 编辑定时任务,包含了各个定时任务
crontab –l 列出所有的定时任务
crontab –r 删除当前用户的定时任务
crontab服务启动与关闭
/etc/init.d/crond start
/etc/init.d/crond stop
/etc/init.d/crond restart