Linux下crontab运行定时任务

under Linux  tag     Published on February 5th , 2020 at 12:48 am

前言

  • Linux下最常见的设置定时任务的方法就是crontab
  • 有两种方法进行定时任务添加,分别是crontab -e和编辑/etc/crontab。
  • 两种方法的语法也略有不同,/etc/crontab的语法比crontab -e多了一个用户字段。

    • crontab -e 用户级,不能设置用户字段
    • /etc/crontab 系统级,只能root用户权限使用,需要设置用户字段

crontab -e

  • 这种方式是用户级的,所有用户的可以使用,实际保存在/var/spool/cron/username中。这种方法不会对语法进行校验。
  • 使用方法:
crontab -e
  • 添加定时任务,如每周一3点执行python脚本
0 3 * * 1 python /data/www/test.py
  • 基本语法:
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * command to be executed

/etc/crontab

  • 直接编辑/etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
  • 直接编辑/etc/crontab 比 crontab -e 多了一个用户名字段,该方法是系统级的,必须root权限使用
  • 使用方法
vim  /etc/crontab
  • 在后面添加定时任务,如每周一3点执行python脚本
 0 3 * * 1 root python /data/www/test.py

时间设置

  • 如果是定时的话 就给相应参数设置数字即可
    记住 * 表示每次, / 表示每几次
每分钟运行一次
* * * * * 
每2天运行一次 在12点0分开始运行
0  12  */2  *  *

命令设置

  • 我们是用python运行 所以命令应该为
python xxxxx.py
  • !!!必须使用绝对路径!!!
  1. 首先获得python的路径
which python3
  1. 再获得py文件的路径
find / -name  xxx.py

重启服务

  • 最后把配置文件写好后通过命令, 重启服务,定时任务生效
sudo service crond restart 

查看信息

  • 通过此命令查看运行状态
cat /var/log/cron

补充语法

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

常见时间设置举例

5      *       *           *     *     ls         指定每小时的第5分钟执行一次ls命令
30     5       *           *     *     ls         指定每天的 5:30 执行ls命令
30     7       8           *     *     ls         指定每月8号的7:30分执行ls命令
30     5       8           6     *     ls         指定每年的6月8日5:30执行ls命令
30     5       8           6     *     ls         指定每年的6月8日5:30执行ls命令
30     6       *           *     0     ls         指定每星期日的6:30执行ls命令
30     3     10,20         *     *     ls         每月10号及20号的3:30执行ls命令
25     8-11    *           *     *     ls         每天8-11点的第25分钟执行ls命令
*/15   *       *           *     *     ls         每15分钟执行一次ls命令
30     6     */10          *     *     ls         每个月中,每隔10天6:30执行一次ls命令
22     4       *           *     *     root     run-parts     /etc/cron.daily
#每天4:22以root身份执行/etc/cron.daily目录中的所有可执行文件,run-parts参数表示,执行后面目录中的所有可执行文件。

本文由simyng创作, 采用知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
  文章最后更新时间为:February 4th , 2020 at 04:48 pm