oflyhigh avatar

crontab环境变量的问题

oflyhigh

Published: 13 Jul 2018 › Updated: 13 Jul 2018crontab环境变量的问题

crontab环境变量的问题

写了一个简单的脚本,定时执行某些任务。好久没有用shell脚本了,有些生疏了,总算磕磕绊绊写完了这个脚本,然后手动执行也正常,然后开开心心地部署到机器上。


(图源 :pixabay)

过了一天,脚本自动执行,我一看日志(我只在脚本中输出核心部分内容到日志),出错了,然而为什么出错呢?明明手动执行得很好呢。

因为这个任务时间敏感,提前一秒执行都不行,于是乎我在程序上将延时改成了加上了20秒,哼,这次一定不会出错吧。

然后又过了一天,脚本自动执行,果然——又出错了,于是我意识到可能是脚本的BUG。可是我反复执行很多次,看起来很正常啊。

哎,既然是在crontab中出错,还是放crontab中调试吧,于是把crontab时间定到下一分钟,开始执行时用ps观察进程执行的状况,咦,明明应该延时几分钟之巨的时间,为何显示延时20秒(我加上的时间)?之前的时间被你吃掉啦?

看来我对我的代码太过于自信了,还是让crontab的执行的所有内容都输出到log吧,然后重新定时,等着生成log,一下子发现了问题。我调用的一个命令行工具,竟然没有找到,然后之后当然一路错下去了😭

可是为啥我手动执行正常,而放crontab中却不正常呢?想来想去,只有一个可能,crontab没有正确地读取当前用户的环境变量。

既然这这个问题,那么解决起来也很简单了,一种方式是在脚本中加载一下环境变量。

source ~/.profile

另外一种方式就更直接粗暴了,脚本中命令行带上路径,比如: ~/bin/abc,这样就不错出错喽。

相对而言,我更喜欢第二种方式,你呢?


(图源 :pixabay)

写完这篇文章我才回想起来,我十五六年前写shell脚本的时候就遇到过这样的问题,当时也是这样解决的(第二种方式),哎,人生啊,就是在不断地做无用功。

这次我记下来,再忘记我就可以来steemit查找了,不过似乎放弃shell才是王道啊。

Leave crontab环境变量的问题 to:

Written by

Programmer, Maker, Freelancer, Witness. Make friends, Make money, Make life better!

Read more #linux posts


Best Posts From oflyhigh

We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From oflyhigh