在Linux系统上以普通用户手工创建服务

admin 13天前 1890

在Linux系统上以普通用户手工创建服务:


#!/bin/bash

SVC_NAME="redis-mv"
SVC_FILE="${HOME}/.config/systemd/user/${SVC_NAME}.service"

if [ -f ${SVC_FILE} ]; then 
  echo && echo 
  echo "==================================================================="
  echo 
  echo "${SVC_FILE} 文件已存在!!!"
  echo 
  echo "如果要重新创建服务,"
  echo "请手工删除 ${SVC_FILE} 后再重新执行本脚本。"
  echo
  echo "==================================================================="
  echo && echo
  exit 1
fi

echo && echo "创建用户systemd目录..."
mkdir -p ${HOME}/.config/systemd/user

REDIS_PATH=`pwd`
echo && echo "REDIS_PATH = ${REDIS_PATH}"

echo && echo "创建${SVC_NAME}.service文件"
cat > ${SVC_FILE} <<EOF 
[Unit]
Description=Redis Server

[Service]
Type=forking
ExecStart=${REDIS_PATH}/redis-start.sh 
ExecReload=${REDIS_PATH}/redis-restart.sh
ExecStop=${REDIS_PATH}/redis-stop.sh
Restart=always
RestartSec=5s

[Install]
WantedBy=default.target
EOF

echo && echo "启用 linger..."
# 执行这个命令,避免在用户会话结束后导致用户级别的systemd服务终止。
loginctl enable-linger ${USER}

echo && echo "验证 linger..."
# 验证linger是否成功启用
# loginctl show-user ${USER} | grep Linger
if loginctl show-user ${USER} | grep "Linger=yes" > /dev/null; then 
  echo "linger 已启用"
else
  echo "linger 未启用"
fi

# 重载配置文件
echo && echo "重新加载配置文件..."
systemctl --user daemon-reload

# 启用开机自启
echo && echo "启用开机自启..."
systemctl --user enable ${SVC_NAME}

echo && echo 
echo 
echo "=================================================="
echo 
echo "恭喜!Redis已经安装成系统服务。"
echo 
echo 
echo "通过系统服务启动redis: "
echo "systemctl --user start ${SVC_NAME} "
echo 
echo 
echo "通过系统服务关闭redis: "
echo "systemctl --user stop ${SVC_NAME} "
echo 
echo 
echo "=================================================="
echo && echo


最新回复 (0)
返回