crontab的使用

crontab是什么

*nix平台中定时执行任务的工具,比方定时备份数据库、重启服务器之类。在大巴WiFi中,采用crontab每隔几分钟执行一个脚本检查一次所有通过微信链接WiFi的用户是否关注了公众号,没关注就踢下WiFi。比较简单地实现了不关注公众号就只给上几分钟网的功能。

crontab怎么用

基本用法

*  *  *  *  * command
分 时 日 月 周  指令

或者

*  *  *  *  * user command
分 时 日 月 周  用户  指令

也可以用A-C/B的形式指定分时日月周,以分为例,是A分钟到C分钟之间,每B分钟执行一次。A-C可以使用*代替,指每B分钟执行一次。

crontab在运行命令后,会发送一份邮件。如果不想收到邮件或者没有配置邮箱,则可以直接把命令的标准输出重定向到一个空设备,即command > /dev/null &

使用crontab中的坑,可能导致任务无法执行

1.尽量使用绝对路径。crontab执行命令的环境变量和终端中是不一样的。crontab的PATH变量在/etc/crontab文件的头部定义,所以要不就把需要的路径加到crontab的PATH中去,要不索性全部使用绝对路径。

在项目中碰到了/rg_sbin不在PATH中, 和PATH没有python的问题。花了很多时间才发现了问题。😭

2.系统任务和用户任务的区别。千万记住,/etc/crontab中配置的是系统的定时任务,这里是需要制定user的,但是在crontab -e中编辑的用户任务,这里是没有user字段的。要是在crontab -e中带上了user,所有命令都会变成类似root command,导致任务都无法执行。

项目中碰到了一個神奇的问题,锐捷的设备会自动把/etc/crontab中的指令复制到root用户的用户crontab中,而且是带了user的,全部命令都是root command的形式,应该是不能执行的,真是诡异。

3.crontab任务实在无法运行时,不妨开启日志,查看crontab日志。crontab的日志需要在/etc/rsyslog.d/50-default.conf中开启,然后重启rsyslog和cron服务。