【问题标题】:Script does not run under cron but runs manually脚本不在cron下运行而是手动运行
【发布时间】:2016-09-17 08:40:36
【问题描述】:

我有一个开发人员为我编写的脚本,它执行主要与 ffmpeg 相关的各种功能。当我使用

手动运行脚本时
sh /home/site/rawvids/encode.sh > /home/site/rawvids/log.txt

脚本运行良好,但通过 cron 运行时失败,错误代码为 127

有什么想法吗?

ls -l上的脚本显示:

-rwxrwxrwx 1 站点没人 3786 Jul 23 17:07 /home/site/rawvids/encode.sh*

【问题讨论】:

  • a) cron 使用的不同路径? b) 对阻止 cron 运行它的脚本的权限?
  • ls -l /home/zavids/rawvids/encode.sh 并将输出添加到问题中

标签: linux cron


【解决方案1】:

错误 127 表示“找不到命令”。 很可能您在脚本中运行了一些不在cron 中的命令(如果您查看/etc/crontab,您可以看到cron 的PATH 是什么)。

您可以在 shell 中检查您当前的 PATH:

$ echo $PATH

然后将这个PATH复制到脚本的开头:

PATH=... 

你必须写你之前得到的那行而不是...(使用echo $PATH)。

还要检查脚本开头是否有 shebang 行 #!/bin/sh。如果您在命令行中启动没有sh 的脚本,则它是导入的。

如果您能向我们展示运行脚本的来自/etc/crontab 的行,那就太好了。

【讨论】:

  • /usr/local/jdk/bin:/opt/jdk/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/ usr/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin
  • 我会在脚本的开头添加哪一部分?
  • shebang 行在脚本开头,etc/crontab 中的行如下
  • 52 19 * * * sh /home/zavids/rawvids/encode.sh > /home/zavids/rawvids/log.txt
  • 这是 cron 中的路径 PATH=/sbin:/bin:/usr/sbin:/usr/bin
【解决方案2】:

您很可能依赖于未为 cron 设置的环境变量(我不确定 cron 是否使用任何变量?)或者 cron 运行的权限是错误的。如果你在 cron 版本中像这样管道输出,它会得到任何输出吗?

【讨论】:

  • 我对 cron 或 linux 不是很有经验,所以不知道,但我确实得到如下输出;
【解决方案3】:

同样...,好吧,我只能忍受这些路径问题,我设置了一个符号链接到 ffprobe 路径或任何丢失的东西,比如

ln -s /usr/local/bin/ffprobe /home/ec2-user/.rvm/rubies/ruby-2.3.0/bin/ffprobe

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 2020-09-10
    • 1970-01-01
    • 2011-09-15
    • 2019-04-24
    • 2018-10-06
    • 1970-01-01
    • 2021-01-01
    相关资源
    最近更新 更多