创建一个 systemd 服务来启动 LAMP &c

创建一个 systemd 服务来启动 LAMP &c

我有一个装有 Ubuntu 的 Linux 机器,我用它来开发。我已禁用ApacheMySQL(嗯,MariaDB)和PostgreSQL(以及其他一些服务),并想编写一个systemd服务,以便我可以根据需要(当我想测试某些东西时)一起启动和停止它们。不幸的是,systemd这对我来说完全是天书——我试图理解一些教程,但它似乎并不是我所需要的……

不确定是否最好只制作 .service,或者 .target 是否更好(例如 lamp.target)?

那么这可能吗?我该怎么做?有任何好的切题示例或教程吗?

答案1

这是一个简单的小脚本,可以完成您的要求:

#!/bin/bash

services=("apache2" "mysql" "postgresql")
action="start"
if [ {$1,,} == "stop" ]; then
        action="stop"
fi

# This script needs to be run with sudo, as it will be starting and or stopping
# services.

if ! [ $(id -u) = 0 ]; then
        echo "This script needs to be run with sudo." >&2
        exit 1
fi

# If we're here let's run through the list of services and start/stop them if
# their status does not meet the desired state.

for i in ${services[@]}
do
        sstat=$(systemctl is-active $i)
        if ([ {$sstat,,} == "active" ] && [ {$action,,} == "stop" ]); then
                echo "Stopping $i"
                sudo service $i $action
        fi

        if ([ {$sstat,,} == "inactive" ] && [ {$action,,} == "start" ]); then
                echo "Starting $i"
                sudo service $i $action
        fi
done

要使用此功能:

  1. 将脚本保存到文件中并为其指定一个容易记住的名称,例如lampp.sh
  2. 将文件设置为可执行文件:
    chmod +x lampp.sh
    
  3. 启动(或停止)你的 LAMPP 堆栈:
    sudo ./lampp.sh start
    

笔记:

  1. 此脚本目前适用于apache2mysqlpostgresql,但是,由于您在问题中提到了“其他几个服务”,因此可以轻松扩展脚本以包含您使用 LAMPP 堆栈启动或关闭的其他服务。只需将它们添加到services文件顶部附近的数组中,这些其他服务就会包含在内。
  2. 服务按照它们在数组中出现的顺序启动/停止。这应该这样做没问题,但是,如果你的服务有依赖关系,你可能需要在发出命令时反转stop数组
  3. 默认情况下,脚本将启动服务。要停止服务,请使用以下命令:
    sudo ./lampp.sh stop
    
    笔记:这里大写并不重要,因为在进行比较时变量在脚本中会转换为小写。
  4. 该脚本支持仅有的 startstop。提供任何其他值,即使它是有效systemd命令,也将被视为start
  5. 此脚本将在发出启动/停止服务的命令之前检查服务是否已处于所需状态
  6. 此脚本必须使用 运行sudo,因为它将启动和停止服务

相关内容