命令在终端中有效,但在脚本中无效

命令在终端中有效,但在脚本中无效

我查看了所有类似的问题,但找不到解决方案。

我正在运行 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

相关内容