![命令在终端中有效,但在脚本中无效](https://linux22.com/image/1017134/%E5%91%BD%E4%BB%A4%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%AD%E6%9C%89%E6%95%88%EF%BC%8C%E4%BD%86%E5%9C%A8%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%97%A0%E6%95%88.png)
我查看了所有类似的问题,但找不到解决方案。
我正在运行 Ubuntu Desktop 16.04。
我需要此命令在后台执行并继续运行。
/usr/bin/avconv -f alsa -i loopout -f mp3 - 2>/dev/null | sudo /usr/bin/ezstream -qvc /etc/ezstream.xml
如果我在终端中运行它或者将它放入 sh 脚本并在终端中运行该脚本,它都会给出预期的结果。但我曾尝试在 GUI 中创建启动对象来运行该脚本,也曾尝试在 cron 中运行该脚本。
(crontab -e
作为用户)
@reboot /home/administrator/stream.sh
我也尝试过运行它rc.local
。但没有任何效果。
奇怪的是,我在 osmc(Debian)中以完全相同的方式运行它,并且它运行完美。
答案1
我猜avconv
需要伪终端。如果从 cron 启动,则没有伪终端。
尝试设置环境变量AV_LOG_FORCE_NOCOLOR=1
。(摘自 avconv 手册页)
答案2
尝试下一个:
修改脚本
#!/bin/bash echo "My script execution" | logger /usr/bin/avconv -f alsa -i loopout -f mp3 - 2>/dev/null | /usr/bin/ezstream -qvc /etc/ezstream.xml | logger echo "End of my script execution" | logger
修改你的 crontab:
sudo crontab -e
更快获得结果的下一种方法:* * * * * /home/administrator/stream.sh
或者
* * * * * /bin/bash -c "/home/administrator/stream.sh"
journalctl -f
在另一个终端窗口中运行,看看会发生什么
尝试使用 root 的 crontab 以 root 身份运行脚本:
sudo crontab -e