我有一个开发人员为我编写的脚本,它执行主要与 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*
错误 127 表示“找不到命令”。您可能在脚本中运行了一些不在 of 中的命令cron
(如果您查看 ,您可以看到 cron 的 PATH 是什么/etc/crontab
)。
您可以在 shell 中检查当前的 PATH:
$ echo $PATH
然后将此 PATH 复制到脚本的开头:
PATH=...
而不是...
您必须编写您之前获得的行(使用echo $PATH
)。
#!/bin/sh
还要检查脚本开头是否有 shebang 行。sh
如果您在没有命令行的情况下启动脚本,则它是导入的。
如果您可以向我们展示/etc/crontab
运行脚本的行,那也很棒。
您很可能依赖于未为 cron 设置的环境变量(我不确定 cron 是否使用任何?)或者 cron 运行的权限是错误的。如果您在 cron 版本中像这样管道输出,它会得到任何输出吗?
同样...,好吧,我只能忍受这些路径问题,我设置了指向 ffprobe 路径的符号链接或缺少的任何内容,例如
ln -s /usr/local/bin/ffprobe /home/ec2-user/.rvm/rubies/ruby-2.3.0/bin/ffprobe