我正在尝试在bash(Ubuntu)中创建一个init脚本,该脚本在特定用户下启动服务。
除此之外,还有更好的方法吗?
su - <user> -c "bash -c 'cd $DIR ;<service name>'"
答案 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/README
。 update-rc.d
的手册页也有助于了解update-rc.d
的使用情况。这肯定适用于我使用的Ubuntu机器,但我猜这个设施将在发行版中使用。
希望这有帮助!
答案 3 :(得分:1)
我遇到了同样的问题,我通过
解决了这个问题使用以下模式生成bash脚本并将其放在/etc/init.d/中
#!/bin/bash
su <user> -c "bash -c '<path to service> $1'"
使用以下命令设置脚本的运行代码
sudo update-rc.d <my_scrpit> defaults
在运行代码中设置此脚本后,重新启动后,root运行脚本并将启动/停止作为$ 1传递给脚本,具体取决于运行模式的状态。
如果要在不重新启动的情况下测试脚本,则应以root身份运行它并传递服务操作,例如启动/停止/重启....
root# ./etc/init.d/my_scrpit start