An *_*ser 6 cron ubuntu shell-script openstack
我有一个脚本可以转储数据库并将 SQL 文件上传到 Swift。我遇到了脚本在终端中运行良好但在 cron 中失败的问题。
稍微调试了一下,/usr/local/bin/swift
发现脚本中没有找到该命令。
这是我的 crontab 条目:
*/2 * * * * . /etc/profile; bash /var/lib/postgresql/scripts/backup
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
swift
作为/usr/local/bin/swift
/etc/profile
执行bash脚本之前脚本。 我该如何解决这个问题?
jes*_*e_b 10
Cron 不会在与用户相同的环境中运行。如果您执行以下操作,您将明白我的意思:
键入env
从终端的提示,并记下输出。
然后像这样设置一个 cron 作业并将它的输出与之前的输出进行比较:
*/5 * * * * env > ~/output.txt
Run Code Online (Sandbox Code Playgroud)
您会发现问题很可能是因为与您的用户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
Run Code Online (Sandbox Code Playgroud)
或者,如果您想更具体,您可以简单地添加以下内容:
PATH=$PATH:/usr/local/bin
Run Code Online (Sandbox Code Playgroud)
但是,我通常总是将用户的 PATH 放在 crontab 中,因为我还没有听到不这样做的充分理由,如果不这样做,您可能会再次遇到此问题。