📜  ubuntu 启动脚本 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:20:45.162000             🧑  作者: Mango

Ubuntu 启动脚本 - Shell/Bash

在 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-StartDefault-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 实现的。

安装和使用

为了将启动脚本安装为系统服务,需要:

  1. 将脚本复制到 /etc/init.d/ 目录下,并设置脚本所属用户和组为 root:root
  2. 运行 sudo chmod +x /etc/init.d/my-app 命令,授予脚本执行权限;
  3. 运行 sudo update-rc.d my-app defaults 命令,将服务添加到运行级别中。

现在,可以通过 service my-app startservice my-app stopservice my-app restart 等命令来启动、停止或重启服务。可以使用 sudo service my-app status 命令来检查服务的状态。

总结

通过编写 Ubuntu 启动脚本,可以让系统在启动时自动运行需要的服务或应用程序,提高系统的可靠性和稳定性。启动脚本的编写需要遵守一定的规范和结构,有助于脚本的可读性和维护性。