Skip to main content

生命周期脚本

脚本要求:

  • 所有生命周期脚本必须以 #!/bin/bash shebang 开头
  • 文件编码: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