crontab环境变量问题

本文档描述了在PHP脚本中使用ffmpeg压缩音频时遇到的问题,当通过crontab调度任务时执行失败。解决方案是检查crontab日志,发现由于环境变量问题导致ffmpeg和ffprobe未找到。通过将这两个命令的路径软链接到/bin目录下,解决了crontab执行失败的错误。同时强调在crontab中使用绝对路径以避免环境变量影响。
摘要由CSDN通过智能技术生成

问题

  • 服务器PHP脚本执行ffmpeg压缩音频,压缩音频比特率,手动执行可以成功,但是crontab一直失败

解决办法

  • 查看crontab日志,tail -f /var/log/cron,脚本是正常执行的,但是没有执行完,因为执行完会存在结束日志
  • 开始php脚本没有打开错误日志,所以开始在脚本开始加上如下代码
ini_set("error_reprorting", "E_ALL");
ini_set("display_errors", "Off");
ini_set("log_errors", "On");
ini_set("error_log", "/home/work/error_log.log");
  • 定时任务执行发现如下报错 tail -f /home/work/error_log.log
PHP Fatal error:  Uncaught Alchemy\BinaryDriver\Exception\ExecutableNotFoundException: Executable not found, proposed : avconv, ffprobe in XXX/vendor/alchemy/binary-driver/src/Alchemy/BinaryDriver/AbstractBinary.php:159
  • which ffprobe
$ which ffprobe
/usr/local/bin/ffprobe

crontab -e 加上如下定时任务
* * * * * echo $PATH>/home/work/test.txt

cat /home/work/test.txt
/usr/bin:/bin
  • 链接到crontab目录下,可以正常执行了。
sudo ln -s /usr/local/bin/ffprobe /usr/bin/ffprobe
sudo ln -s /usr/local/bin/ffmpeg /usr/bin/ffmpeg
  • 使用crontab最好使用绝对路径,就不需要考虑这个环境变量问题了。这儿没有使用是因为使用第三方库。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
crontab中定义环境变量有两种方式。首先,可以直接在crontab中定义变量,可以通过在crontab中的命令前添加变量名和值来实现。例如,可以在crontab中使用如下的方式定义变量A为123: A=123 * * * * * echo $A > /tmp/a.txt 需要注意的是,在这种方式下,不能使用$来引用其他变量。另一种方式是在/etc/environment文件中定义变量。这个文件定义变量的格式为NAME=VALUE,和crontab相关,同样不能使用$来引用其他变量。操作系统在登录时使用的第一个文件就是/etc/environment文件,该文件包含指定所有进程的基本环境的变量。需要注意的是,不要在/etc/environment文件中使用类似"PATH=$PATH:/usr/local/jdk/bin"这样的语法,否则可能导致系统无法启动。 如果想要保持多台机器的crontab一致,但是变量值并不完全相同,可以考虑将变量配置在/etc/environment中,这样crontab就可以保持一致。例如,机器1的配置为A=123,机器2的配置为A=456,可以在两者的crontab中使用相同的命令,如下所示: * * * * * echo "$A" > /x.txt 一般不建议直接修改/etc/environment文件,而是可以在目录/etc/profile.d下新增一个.sh文件来替代。但是如果想要在crontab中生效,则只能修改/etc/environment文件,经测试/etc/profile.d方式不起作用。需要注意的是,在/etc/environment中设置的变量在shell中并不生效,但在crontab中是有效的。 关于cron环境变量问题,还有一个可以参考的图片来源于Jenkins的Poll SCM插件的帮助文档,可以进一步了解cron的使用和环境变量的配置。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [crontab使用环境变量](https://blog.csdn.net/weixin_34001430/article/details/89870952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [crontab环境变量,以及应该注意的一些问题](https://blog.csdn.net/sho_ko/article/details/84374756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值