为什么我的bash脚本不能正常运行?

时间:2015-03-03 07:36:02

标签: linux bash raspberry-pi

我有一个简单的脚本,在终端中工作正常,但在init.d脚本或crontab中没有。我正在研究覆盆子pi。

是否有编写在后台运行的脚本的规则?

这是我的剧本:

 #!/bin/bash
 while true; do echo "ALIVE" | sudo nc -l -p 80; done

2 个答案:

答案 0 :(得分:1)

  1. /etc/crontab/etc/cron.d或来自中定义的Cron脚本 crontab -e可以作为root以外的用户运行。所有权限 (例如,在日志文件上)和授权信息(在您的情况下为sudoers)必须设置 相应

  2. 如果它们不包含Shebang行,则cron脚本可以在不同的 shell 中运行,具体取决于脚本运行的用户(请参阅shell中的设置) /etc/passwd)。 shell也可以通过crontab中的SHELL变量覆盖。这与OP的脚本无关。

  3. 运行init.dcron脚本的shell可能使用不同的shell 的环境即可。最值得注意的是PATH可能不同,因此建议仅使用绝对路径或根据需要设置PATH

答案 1 :(得分:0)

  1. 运行脚本的用户必须能够sudo。使用visudo命令配置它。

  2. 您应该检查输出/错误。您可以将其更改为:

    while true; do echo "ALIVE" | sudo nc -l -p 80 &>/var/log/netcat-test.log; done

  3. 请注意,您应该将日志写入该用户肯定有权访问的位置以及已存在的目录。但是由于写了很多日志,这会丢弃你的磁盘。我建议加一个延迟:

     while true; do echo "ALIVE" | sudo nc -l -p 80 &>>/var/log/netcat-test.log; sleep 30; done
    
    1. 您应该检查脚本是否已启动。添加echo Script started >> the-log-file; date >> the-log-file。如果脚本未启动,请确保将其标记为可执行文件。如果脚本正在启动,请确保脚本不会导致系统崩溃 - 系统是否需要返回此脚本?因为它目前不是后台守护进程。它永远不会完成,也不会将控制权返回给shell。尝试用while true替换for count in 1 2进行测试,只执行两次。