我有一个装有 Ubuntu 的 Linux 机器,我用它来开发。我已禁用Apache
、MySQL
(嗯,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
要使用此功能:
- 将脚本保存到文件中并为其指定一个容易记住的名称,例如
lampp.sh
- 将文件设置为可执行文件:
chmod +x lampp.sh
- 启动(或停止)你的 LAMPP 堆栈:
sudo ./lampp.sh start
笔记:
- 此脚本目前适用于
apache2
、mysql
和postgresql
,但是,由于您在问题中提到了“其他几个服务”,因此可以轻松扩展脚本以包含您使用 LAMPP 堆栈启动或关闭的其他服务。只需将它们添加到services
文件顶部附近的数组中,这些其他服务就会包含在内。 - 服务按照它们在数组中出现的顺序启动/停止。这应该这样做没问题,但是,如果你的服务有依赖关系,你可能需要在发出命令时反转
stop
数组 - 默认情况下,脚本将启动服务。要停止服务,请使用以下命令:
笔记:这里大写并不重要,因为在进行比较时变量在脚本中会转换为小写。sudo ./lampp.sh stop
- 该脚本支持仅有的
start
和stop
。提供任何其他值,即使它是有效systemd
命令,也将被视为start
- 此脚本将在发出启动/停止服务的命令之前检查服务是否已处于所需状态
- 此脚本必须使用 运行
sudo
,因为它将启动和停止服务