生命周期脚本
脚本要求:
- 所有生命周期脚本必须以
#!/bin/bashshebang 开头 - 文件编码:UTF-8
- 文件权限:
755(所有人可执行,属主可写) - 所有脚本必须以
0退出码表示成功 - 使用
set -e在任何错误时失败退出
preinst — 安装前
#!/bin/bash
set -e
# 创建专属用户(如不存在)
if ! id -u <appid> > /dev/null 2>&1; then
useradd --system --no-create-home --shell /usr/sbin/nologin <appid> 2>/dev/null || true
fi
# 创建数据目录
mkdir -p /var/lib/<appid>
chown <appid>:<appid> /var/lib/<appid> 2>/dev/null || true
# 创建 Unix Socket 目录(WebUI 内部打开)
mkdir -p /var/api
exit 0
postinst — 安装后
#!/bin/bash
set -e
# 设置文件权限
chown -R <appid>:<appid> /usr/local/<appid> 2>/dev/null || true
chown -R <appid>:<appid> /var/lib/<appid> 2>/dev/null || true
# 确保 webui.bz2 存在时解压(WebUI 应用)
if [ -f /usr/local/<appid>/webui.bz2 ]; then
cd /usr/local/<appid> && tar -xjf webui.bz2 2>/dev/null || true
fi
# 启用并启动服务
systemctl daemon-reload
systemctl enable <system_id>.service
systemctl start <system_id>.service
exit 0
prerm — 卸载前
#!/bin/bash
set -e
# 杀死应用用户的所有残留进程(升级安全性)
pkill -u <appid> 2>/dev/null || true
sleep 1
# 停止并停用服务
systemctl stop <system_id>.service 2>/dev/null || true
systemctl disable <system_id>.service 2>/dev/null || true
exit 0
postrm — 卸载后
#!/bin/bash
set -e
# 重载 systemd
systemctl daemon-reload
# purge 时移除用户和数据
if [ "$1" = "purge" ]; then
if id -u <appid> > /dev/null 2>&1; then
userdel <appid> 2>/dev/null || true
fi
rm -rf /var/lib/<appid>
rm -f /var/api/<appid>.sock
# 移除 nginx 配置
rm -f /etc/nginx/conf.d/<appid>.conf 2>/dev/null || true
# 移除 systemd 服务文件
rm -f /etc/systemd/system/<system_id>.service 2>/dev/null || true
# 重载 systemd
systemctl daemon-reload 2>/dev/null || true
fi
exit 0