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服务。