[linux] 定时任务crontab

测试网站: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脚本写入定时任务时,任务字符串后面必须加换行符"\n",否则不会执行 

 

编辑/查看定时任务

crontab –e 编辑定时任务,包含了各个定时任务

crontab –l 列出所有的定时任务

crontab –r 删除当前用户的定时任务

 

crontab服务启动与关闭

/etc/init.d/crond start

/etc/init.d/crond stop

/etc/init.d/crond restart

 

参照:https://www.cnblogs.com/erbing/p/10019172.html

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章