在非交互式 shell 中运行脚本?

cwd*_*cwd 17 shell cron environment-variables interactive

我有一个运行脚本的 cron 作业。当我通过交互式 shell(ssh 到 bash)运行脚本时,它工作正常。当脚本通过 cron 自行运行时,它会失败。

我的猜测是它使用了交互式 shell 中设置的一些环境变量。我将对脚本进行故障排除并删除它们。

进行更改后,我知道我可以在 cron 中将脚本排队以使其正常运行,但是有没有一种方法可以从命令行运行脚本,但告诉它像从 cron 一样运行 -即在非交互式环境中?

Gil*_*il' 15

从 cron 运行命令和在命令行上运行之间的主要区别是:

  • cron 可能使用了不同的 shell(通常/bin/sh);
  • cron 肯定在一个小环境中运行(哪些取决于 cron 实现,因此请查看cron(8)crontab(5)手册页;通常只有HOME,也许SHELL,也许LOGNAME,也许USER和一个小PATH);
  • cron 对%字符进行了特殊处理(它变成了换行符);
  • cron 作业在没有终端或图形环境的情况下运行。

下面的调用将运行 shell 片段,就像它是从 cron 调用的一样。我假设该片段不包含字符'%.

env - HOME="$HOME" USER="$USER" PATH=/usr/bin:/bin /bin/sh -c 'shell snippet' </dev/null >job.log 2>&1
Run Code Online (Sandbox Code Playgroud)

另请参阅从 cron 执行 sh 脚本,这可能有助于解决您的问题。