我需要在启动时运行一个脚本,该脚本需要在某个用户下运行,而不是以 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
请注意:
第二条命令只能在第一个命令终止(或进入后台)时启动;
-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
。现在我的脚本可以正常运行,没有错误。