登录到系统之前,我需要运行一个进程。如何像服务一样运行它?如何在Linux中进行服务?
在Ubuntu和Fedora中?服务是定制tomcat
登录到系统之前,我需要运行一个进程。如何像服务一样运行它?如何在Linux中进行服务?
在Ubuntu和Fedora中?服务是定制tomcat
Answers:
要在没有登录系统或登录系统之前(即“启动时”)运行服务,您将需要创建启动脚本并将其添加到启动顺序中。
服务脚本分为三个部分:启动,停止和重新启动。
服务脚本的基本结构为:
#!/bin/bash
#
RETVAL=0;
start() {
echo “Starting <Service>”
}
stop() {
echo “Stopping <Service>”
}
restart() {
stop
start
}
case “$1″ in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $”Usage: $0 {start|stop|restart}”
exit 1
esac
exit $RETVAL
根据您的喜好调整脚本之后,只需将其放在/etc/init.d/中,
然后将其添加到系统服务启动过程中(在Fedora上,我不是Ubuntu用户,> D):
chkconfig -add <ServiceName>
服务将添加到系统启动过程中,而您无需手动再次启动它。
干杯!
根据初始化系统的不同,您创建初始化脚本的方式也不同。Fedora为您提供了新贵和systemd供您选择,当然还有SysV兼容性。
/etc/init/custom-tomcat.conf
放进去:
start on stopped rc RUNLEVEL=3
respawn
exec /path/to/your/tomcat --and --parameters
并且您的Tomcat应该在系统启动时启动。
/etc/systemd/system/custom-tomcat.service
放进去:
[Service]
ExecStart=/path/to/your/tomcat --and --parameters
Restart=always
[Install]
WantedBy=multi-user.target
并使用启用服务systemctl enable custom-tomcat.service
。它将在每次正常引导时启动。
当然,两个初始化系统都没有更多的配置选项,您可以在它们的文档中查看。
如果有cron
守护程序,则预定义的cron时间挂钩之一是@reboot
,它在系统启动时自然运行。运行crontab -e
以编辑您的crontab
文件,并添加一行:
@reboot /your/command/here
您可以制作一个更复杂的脚本,该脚本允许您在特定用户的权限下运行,如下所示:
#!/bin/sh
NAME=myservice
DESC="My Service"
USERGROUP="myservice:myservice"
#Helper functions
start() {
start-stop-daemon --start --quiet --background --make-pidfile \
--pidfile /var/run/$NAME.pid --chuid $USERGROUP \
--exec /usr/local/bin/myservice
}
stop() {
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
--exec myservice --retry 30
}
case "$1" in
start)
echo -n "Starting $DESC: "
start
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
stop
echo "$NAME."
;;
restart)
echo -n "Restarting $DESC: "
#set +e
stop
#set -e
#sleep 1
start
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart}" >&2
exit 1
;;
esac
exit 0
该脚本位于/etc/init.d/myservice中,您可以通过执行以下命令启动服务:
/etc/init.d/myservice start
阅读start-stop-daemon的手册页以了解其工作原理。
在Ubuntu或Debian中,您可以使用添加
update-rc.d your_service defaults
去除
update-rc.d -f your_service remove
再见!\ o
很好地实现了功能状态并强制重载为LSB编译器
service --status-all
列表中?