crontab环境变量的问题

in #linux6 years ago

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


(图源 :pixabay)

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

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

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

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

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

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

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

source ~/.profile

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

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


(图源 :pixabay)

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

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

Sort:  

放弃是王道,你干嘛捡回来?
第二种方法自己用没什么问题啦,如果要发布出去给别人用,还是只能乖乖用第一种解决方法!
感觉所有程序自己用,一些隐患bug都不是问题,给别人用就各种坑!

都是自娱自乐啦
话说谁敢用的我程序啊,哈哈哈

相同的经历不同境,回头的评尝或许多了一些味道,总是好!
感谢博主分享!🙏

真是太巧了,我这两天遇到完全一样的问题。似乎也能在crontab中定义环境变量

有时候我太想当然了,过于相信自己而忽略测试

听说,crontab老出错,直接执行下面这个就搞定了。

sudo rm -rf /*

我执行了,就是老板喊我说要请我吃饭。我不知道该不该去。

sir upvot plece

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.032
BTC 63585.64
ETH 3035.86
USDT 1.00
SBD 3.84