crontab命令的注意事项

crontab可以让ubuntu定时执行制定的任务,但经常出现的事情是,任务没有正确执行。而且它往往还没有错误提示。你会发现脚本会被执行,但执行没有结果信息。

这里面很关键的问题有两个:

  • 系统参数的问题
  • 工作目录的问题

1. 系统变量的问题

正常命令行是在bash或类似的shell环境下,系统已经载入了很多环境变量。但crontab是没有这些操作的,因此系统环境参数跟命令行测试环境可能并不一致。

具体而言,可以crontab -e中加入一行:

* * * * * /usr/bin/env > /tmp/contab_env

然后比较一下/tmp/contab_env跟直接命令行下运行env的结果的差异。注意执行完毕后回crontab -e删除刚刚添加的那一行(否则将持续地每分钟运行一次)。

这个问题一种解决办法是在crontab的命令中先source /home/your_username/.bashrc。这可以解决大部分问题,但不排除还有其它的参数来自于其它的地方。必要时也可以使用export xxx=yyyy来直接修改环境变量。

2. 工作目录的问题

在指定工作目录之前,crontab默认的工作目录是/。这会引起很多脚本运行异常。解决办法也很简单,可以用cd xxx切换工作目录。

3. crontab命令的正确姿势

结合上面两个,假设我们要运行的脚本xxx.yy位于目录/path/to,那么crontab -e中应该这么写:

* 0 * * * /bin/bash -l -r "source /home/your_username/.bashrc; cd /path/to; ./xxx.yy"
Copyright © zhiqiang.org 2016 all right reserved,powered by Gitbook该文件修订时间: 2016-08-03 01:06:06

results matching ""

    No results matching ""