我有一个脚本,可以转储数据库并将SQL文件上传到Swift。我遇到了脚本在终端中运行正常但在cron中失败的问题。
进行一些调试后,我/usr/local/bin/swift
发现在脚本中找不到该命令。
这是我的crontab条目:
*/2 * * * * . /etc/profile; bash /var/lib/postgresql/scripts/backup
这是我尝试过的:
swift
为/usr/local/bin/swift
/etc/profile
执行bash脚本之前脚本。我该如何解决?
Cron与用户使用的环境不同。如果您执行以下操作,您将明白我的意思:
键入env
从终端的提示,并记下输出。
然后像这样设置一个cron作业,并将其输出与上一个进行比较:
*/5 * * * * env > ~/output.txt
您会发现问题很可能是因为与您的用户crontab
没有相同的PATH
变量。作为解决方案,您可以(来自postgres用户)echo $PATH
,然后将其结果复制到crontab的第一行(类似这样)
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/jbutryn/.local/bin:/home/jbutryn/bin
或者,如果您想更具体一点,可以添加以下内容:
PATH=$PATH:/usr/local/bin
但是,我通常总是将用户的PATH放在crontab中,因为我还没有听到不这样做的充分理由,如果不这样做,您很可能会再次遇到这个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句