ubuntu下定时任务的使用

Crontab

cron最适合安排重复性任务。使用相关的实用程序通常可以更轻松地完成一次性任务的调度。

crontab wiki

crontab服务

服务状态

  • 查看 /etc/init.d/cron status
  • 启动 /etc/init.d/cron start
  • 停止 /etc/init.d/cron stop
  • 重启 /etc/init.d/cron restart

开启日志服务

1
sudo vi /etc/rsyslog.d/50-default.conf

其中有一行 #cron.* /var/log/cron.log ,把#号删除掉

重启日志服务 sudo service rsyslog restart

crontab编辑&执行

1
2
3
4
5
6
7
usage: crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)

crontab -e

crontab -e进入编辑模式,自行增加删除即可

默认使用的为当前用户权限

条件用法

1
2
3
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

如图:

crontab简化示意

具体示例

m h dom mon dow command

分 时 日 月 周 命令

* * * * * echo 'one minute execute' 表示每一分钟执行一次

/3 * * * * 表示每隔3分钟执行一次

1 */3 * * * 表示每隔3小时的执行一次的第1分钟执行

1 1 */3 * * 表示每隔3天,当天的1点1分执行一次

1 10 * * 2,3,4 表示每周2到周4的每天10点1分执行一次

转图,侵删

crontab示例

不发mail

默认情况下,定时任务在执行完毕都是会发邮件的,如果没有配置,则会出现:

CRON[30536]: (CRON) info (No MTA installed, discarding output)

我们只执行单独脚本,不想让它发邮件,在命令后跟加 >/dev/null 2>&1

例如:
python3 /home/hanz/GitHubCom/Automated-Test-With-Python/lesson2/mathsuite.py >/dev/null 2>&1

查看日志

  • 未执行过定时任务,日志文件是不会生成的

  • crontab日志文件路径/var/log/cron.log

  • 查看滚动日志tail -f /var/log/cron.log

需要注意

权限问题

  • crontab是区分用户权限的,比如你在用户hanz下,创建了定时任务,如果注销掉此用户,使用root这个用户登陆
    那定时任务是不会执行的;

  • 简单的查看:使用hanz用户crontab -l去查看,和root用户crontab -l去查看,看到的结果是不同的

  • 在使用crontab执行脚本时,如果没有执行任务,请查看crontab和脚本是否开启执行权限

执行命令路径问题

写执行命令时,尽量使用完整路径,原因是,如果你配置的环境变量不同,或者更换运行环境后,会出现问题。

命令本身和执行脚本同样适用,如:

1
/usr/bin/python3 /home/hanz/GitHubCom/Automated-Test-With-Python/lesson2/mathsuite.py

而不是使用这种:

1
python3 ~/GitHubCom/Automated-Test-With-Python/lesson2/mathsuite.py