情况:
执行nodejs做视频流转发时发现响应成功,但是视频流不能正常播放,但是手动执行nodejs时可以正常播放,最后排查到crontab执行脚本时ffmpeg这个命令没有找到
测试:
# crontab添加此任务
* * * * * env > /tmp/env.txt
# 执行后输出结果
cat /tmp/env.txt
#结果
XDG_SESSION_ID=c33
SHELL=/bin/sh
USER=root
PATH=/usr/bin:/bin
PWD=/root
LANG=en_US.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
原因:
linux加载配置文件是有顺序的:https://www.jianshu.com/p/202e95eb79be
/etc/environment | 是系统在登录时读取的第一个文件,用于为所有进程设置环境变量。 |
/etc/profile | 是系统登录时执行的第二个文件,可以用于设定针对全系统所有用户的环境变量。 |
~/.profile | 是对应当前登录用户的profile文件,用于定制当前用户的个人工作环境。 |
/etc/bash.bashrc | 是针对所有用户的bash初始化文件,在此中设定的环境变量将应用于所有用户的shell中,此文件会在用户每次打开shell时执行一次。 |
~/.bashrc | 是对应当前登录用户的bash初始化文件,当用户每次打开shell时,系统都会执行此文件一次。 |
解决:
方法有很多,在此只贴出我用的两种
1、* * * * * source /etc/profile && 需要执行的命令
2、crontab开头加入
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin