我有一个简单的脚本,在终端中工作正常,但在init.d脚本或crontab中没有。我正在研究覆盆子pi。
是否有编写在后台运行的脚本的规则?
这是我的剧本:
#!/bin/bash
while true; do echo "ALIVE" | sudo nc -l -p 80; done
答案 0 :(得分:1)
在/etc/crontab
,/etc/cron.d
或来自中定义的Cron脚本
crontab -e
可以作为root
以外的用户运行。所有权限
(例如,在日志文件上)和授权信息(在您的情况下为sudoers
)必须设置
相应
如果它们不包含Shebang行,则cron脚本可以在不同的 shell 中运行,具体取决于脚本运行的用户(请参阅shell中的设置) /etc/passwd
)。 shell也可以通过crontab中的SHELL
变量覆盖。这与OP的脚本无关。
运行init.d
和cron
脚本的shell可能使用不同的shell
的环境即可。最值得注意的是PATH
可能不同,因此建议仅使用绝对路径或根据需要设置PATH
。
答案 1 :(得分:0)
运行脚本的用户必须能够sudo。使用visudo
命令配置它。
您应该检查输出/错误。您可以将其更改为:
while true; do echo "ALIVE" | sudo nc -l -p 80 &>/var/log/netcat-test.log; done
请注意,您应该将日志写入该用户肯定有权访问的位置以及已存在的目录。但是由于写了很多日志,这会丢弃你的磁盘。我建议加一个延迟:
while true; do echo "ALIVE" | sudo nc -l -p 80 &>>/var/log/netcat-test.log; sleep 30; done
echo Script started >> the-log-file; date >> the-log-file
。如果脚本未启动,请确保将其标记为可执行文件。如果脚本正在启动,请确保脚本不会导致系统崩溃 - 系统是否需要返回此脚本?因为它目前不是后台守护进程。它永远不会完成,也不会将控制权返回给shell。尝试用while true
替换for count in 1 2
进行测试,只执行两次。