Bash init - 在特定用户下启动服务

时间:2011-09-19 02:08:55

标签: linux bash ubuntu init

我正在尝试在bash(Ubuntu)中创建一个init脚本,该脚本在特定用户下启动服务。

除此之外,还有更好的方法吗?

su - <user>  -c "bash -c  'cd $DIR ;<service name>'"

4 个答案:

答案 0 :(得分:20)

Ubuntu使用已支持此功能的start-stop-daemon

使用/etc/init.d中的骨架文件:

sudo cp /etc/init.d/skeleton /etc/init.d/mynewservice

适当地编辑我的新服务。

将以下参数添加到调用start-stop-daemon的行中:

--chuid username:group

示例:

更改

start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \

start-stop-daemon --start --quiet --chuid someuser:somegroup --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \

最后,注册您的服务并启动它:

update-rc.d mynewservice defaults 99 && service mynewservice start

有关start-stop-daemon here

的其他选项的更多信息

答案 1 :(得分:4)

或者,您可以使用daemon文件中定义的/etc/init.d/functions函数:

daemon --user=<user> $DIR/program

如果你研究它的语法,你可以做其他的事情,比如定义PID文件的位置,设置好的等级,以及诸如此类的东西。否则,将服务作为守护进程启动非常有用。使用daemon启动的服务很容易被另一个函数函数killproc终止。

答案 2 :(得分:2)

您可以在/etc/init.d/下创建一个脚本,例如your_service_name,内容最少

#!/bin/sh
su - <user> -c "bash -c 'cd $DIR ;<service name>'"

为脚本提供适当的权限。现在在所需的update-rc.d目录中使用/etc/rc<run_level>.d命令为脚本创建一个软链接,以便在系统以所提到的运行级别启动时运行脚本。
请参阅/etc/init.d/下的脚本以供参考&amp;有关编写脚本的更多详细信息,请查看/etc/init.d/READMEupdate-rc.d的手册页也有助于了解update-rc.d的使用情况。这肯定适用于我使用的Ubuntu机器,但我猜这个设施将在发行版中使用。
希望这有帮助!

答案 3 :(得分:1)

我遇到了同样的问题,我通过

解决了这个问题
  1. 使用以下模式生成bash脚本并将其放在/etc/init.d/中  #!/bin/bash
     su <user> -c "bash -c '<path to service> $1'"

  2. 使用以下命令设置脚本的运行代码
     sudo update-rc.d <my_scrpit> defaults

  3. 在运行代码中设置此脚本后,重新启动后,root运行脚本并将启动/停止作为$ 1传递给脚本,具体取决于运行模式的状态。
    如果要在不重新启动的情况下测试脚本,则应以root身份运行它并传递服务操作,例如启动/停止/重启....      root# ./etc/init.d/my_scrpit start