📅  最后修改于: 2023-12-03 15:20:45.162000             🧑  作者: Mango
在 Linux 系统中,启动脚本是一个在系统启动时运行的脚本,用于初始化系统状态和启动需要的服务和应用程序。Ubuntu 系统中的启动脚本也称为初始化脚本(init script)或系统服务(service)。
Ubuntu 启动脚本通常编写成 Shell/Bash 脚本,其基本结构如下:
#!/bin/sh
### BEGIN INIT INFO
# Provides: <name-of-the-service>
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: <description-of-the-service>
# Description: <detailed-description-of-the-service>
### END INIT INFO
# <commands-to-start-the-service>
# <commands-to-stop-the-service>
其中:
#!
行指定了脚本所使用的 Shell/Bash 程序。在 Ubuntu 系统中通常使用 /bin/sh
。### BEGIN INIT INFO
行到 ### END INIT INFO
行之间是脚本的元信息,包括服务名、依赖关系、启动和停止的运行级别等说明。这部分信息在执行 service
命令时会被读取。其中 Provides
,Required-Start
,Required-Stop
,Default-Start
和 Default-Stop
字段必须按照规范设置。下面是一个简单的示例,演示了如何编写一个启动脚本来启动一个名为 my-app
的服务:
#!/bin/sh
### BEGIN INIT INFO
# Provides: my-app
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: My App
# Description: My App Start/Stop Script
### END INIT INFO
DESC="My App"
# The path to the application executable
APP_PATH="/usr/local/bin/my-app"
# The user account that runs the service
RUN_AS_USER="myuser"
start() {
echo "Starting $DESC..."
start-stop-daemon --start --quiet --background --pidfile /var/run/my-app.pid \
--make-pidfile --chuid $RUN_AS_USER --exec $APP_PATH
}
stop() {
echo "Stopping $DESC..."
start-stop-daemon --stop --quiet --pidfile /var/run/my-app.pid --exec $APP_PATH
rm -f /var/run/my-app.pid
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}" >&2
exit 1
;;
esac
在上面的脚本中,服务名为 my-app
,启动和停止的命令是通过 start-stop-daemon
实现的。
为了将启动脚本安装为系统服务,需要:
/etc/init.d/
目录下,并设置脚本所属用户和组为 root:root
;sudo chmod +x /etc/init.d/my-app
命令,授予脚本执行权限;sudo update-rc.d my-app defaults
命令,将服务添加到运行级别中。现在,可以通过 service my-app start
,service my-app stop
,service my-app restart
等命令来启动、停止或重启服务。可以使用 sudo service my-app status
命令来检查服务的状态。
通过编写 Ubuntu 启动脚本,可以让系统在启动时自动运行需要的服务或应用程序,提高系统的可靠性和稳定性。启动脚本的编写需要遵守一定的规范和结构,有助于脚本的可读性和维护性。