我有一个这样安装的服务:
install -m 755 init_script /etc/init.d/spacenavd
cd /etc/rc2.d
ln -s ../init.d/spacenavd S99spacenavd
init_script 的作用是启动脚本:
/usr/local/bin/spacenavd -v
所有这些工作正常,并允许服务在启动时自动启动。但是,我在启动时运行另一个使用 spacenavd 服务的脚本时遇到问题。当我登录后手动运行该脚本时,该脚本可以正常工作。但是,当我将其放入 rc.local 中时,在启动时运行它就不起作用了。
我在 rc.local 中执行以下操作:
cd /home/filedirec
sudo ./my_script &
这有时有效,有时无效。我似乎无法确定原因是什么。有什么好的方法可以解决问题呢?
答案1
似曾相识。
Sudo 是一个交互式程序,如果您最近没有输入凭据,则需要您提供密码才能以 root(或其他用户)身份运行命令。这本地文件脚本未附加到您的控制台,因此您永远不会看到它要求输入密码。
这本地文件脚本也已经以 root 身份运行,因此您应该删除须藤从中发出命令。
更好的方法是简单地替换您添加的所有内容:/home/filedirec/my_script(或者/home/filedirec/my_script &如果需要的话)。使用绝对路径可以更快、更容易地查看到底是什么本地文件如果稍后需要审查脚本正在执行的操作,光盘等通常更适合交互式 shell。
答案2
您可以做的一件事是在单独的屏幕会议。
例如,您的 rc.local 文件可能如下所示:
/usr/bin/screen -dmS my_script bash -c '/home/filedirec/my_script'
然后,您可以在启动后轻松“重新连接”屏幕并查看脚本的情况。还可以将输出记录到文件中。
如果 screen 命令在您的系统上不可用:sudo apt-get install screen
有图教程: screen: 即使连接断开也能保持进程运行