cron 中的脚本找不到命令

cron 中的脚本找不到命令

我有一个脚本可以转储数据库并将 SQL 文件上传到 Swift。我遇到了脚本在终端中运行良好但在 cron 中失败的问题。

经过一番调试,我发现/usr/local/bin/swift脚本中找不到该命令。

这是我的 crontab 条目:

*/2 * * * * . /etc/profile; bash /var/lib/postgresql/scripts/backup  

这是我尝试过的:

  1. swift使用as的完整路径/usr/local/bin/swift
  2. /etc/profile在执行 bash 脚本之前 执行脚本。

我该如何解决这个问题?

答案1

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 中,因为我还没有听到不这样做的充分理由,如果不这样做,您可能会再次遇到此问题。

答案2

你做了最常见的一种计划任务错误。如果您使用特定环境,请将路径添加到 $PATH:

# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/sbin:/usr/bin:/script
export PATH

另请检查您的 cron 日志(/var/log/cron 或 /var/log/syslog)。并检查用户对二进制文件的权限。

相关内容