在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