为什么 rc.local 不运行这个脚本?

为什么 rc.local 不运行这个脚本?

我需要在启动时运行一个脚本,该脚本需要在某个用户下运行,而不是以 root 身份运行,我尝试将该脚本添加到 /etc/rc.local,如下所示:

#!/bin/sh -e
#
# rc.local
#
#!/bin/sh
su - tue -c "/home/tue/main"
su - tue -c "/opt/craftbukkit/start.sh"

第一行在 /home/tue 中启动一个程序 main,运行正常。第二行是我的脚本,但不知为何它没有运行?

答案1

请注意:

  1. 第二条命令只能在第一个命令终止(或进入后台)时启动;

  2. -e如果命令返回非零退出代码,选项将停止执行。

答案2

尝试这样的操作:

#!/bin/sh -e
#
# rc.local
#
#!/bin/sh
su - tue -c "/home/tue/main" &
su - tue -c "/opt/craftbukkit/start.sh" &

这将在后台启动这两个进程,以便脚本的其余部分可以正常继续。如果这不是您想要的,请更详细地说明您的情况。

答案3

您确定您的命令没有运行吗?就我的情况而言,我发现它正在运行,但有一个错误导致它停止。您可以使用 nohup 之类的命令来确定是否出现错误:

nohup bash /home/ubuntu/myscript.sh > /home/ubuntu/error_log.txt 2>&1 &

...bash /home/ubuntu/myscript.sh我想要运行的实际命令在哪里。检查错误日志并查看您发现的内容。

您可能正在运行类似 java 的程序或类似 drush 的实用程序,而您的 $PATH 变量在运行 /etc/rc.local 时不知道如何找到它,这是我遇到的问题。运行此脚本时,$PATH 变量非常小。

如果您想查看运行时 $PATH 变量中的内容,请将其放入文件中/etc/rc.local

echo $PATH > /home/rc_local_path.log

..重启后检查日志文件。在我的例子中(可能也是你的例子中),路径变量如下:

/sbin:/usr/sbin:/bin:/usr/bin

我收到的错误是这样的drush - command not found... 所以我输入command -v drush并发现它被安装到了 /usr/local/bin 中,但在运行脚本时它不在 $PATH 中,所以我通过 创建了一个符号链接到它ln -s /usr/local/bin/drush /usr/bin/drush。现在我的脚本可以正常运行,没有错误。

相关内容