#!/bin/bash
# 确保日结物化守护进程 aaden-gdpdu（PHP/autoWriteGdpdu.php）在跑。`aaden-cli auto-write-gdpdu`、装机脚本 aadensetup.sh、
# patch/202610031600ensureGdpduDaemon.sh 都调这一个脚本；幂等，重复跑安全。
#
# 为什么必须有它：每日数据库备份由日结物化流程 ZBon.php?op=writeCombinedZbonClosing 触发，而这个流程只由该守护进程
# 循环调用；没有它，csv_* 日结不物化（DSFinV-K 导出缺日结），备份也从不执行（10-03 发现 35 台新店漏装）。
#
# 已经在跑就不动；有 systemd 装成服务；没有 systemd（老 WSL）写 /etc/cron.d 每分钟调一次。
# writeCombinedZbonClosing 内部 select … for update 加锁，重复调用也只会串行处理。
PW='Innerken322.'
sudoS(){ echo "$PW" | sudo -S bash -c "$*"; }
PHP_SCRIPT=/var/www/html/PHP/autoWriteGdpdu.php
UNIT=/etc/systemd/system/aaden-gdpdu.service
CRON=/etc/cron.d/aaden-gdpdu

if [ -n "${AADEN_CLOUD_MODE:-}" ]; then echo "云端模式，跳过"; exit 0; fi
if [ ! -f "$PHP_SCRIPT" ]; then echo "没有 $PHP_SCRIPT，跳过"; exit 0; fi
# 只认真正用 php 跑这个脚本的进程（命令行里恰好带着文件名的 tail/grep 之类不算）
if systemctl is-active --quiet aaden-gdpdu.service 2>/dev/null \
  || pgrep -f '^(/usr/bin/)?php[0-9.]* .*autoWriteGdpdu\.php' >/dev/null; then
  echo "aaden-gdpdu 已在运行，不动"; exit 0
fi

if [ -d /run/systemd/system ]; then
  TMP=$(mktemp)
  cat > "$TMP" <<EOF
[Unit]
Description=Gdpdu Service For Aaden

[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/bin/php $PHP_SCRIPT

[Install]
WantedBy=multi-user.target
EOF
  sudoS "install -m 644 '$TMP' '$UNIT' && systemctl daemon-reload && systemctl enable --now aaden-gdpdu.service"
  rm -f "$TMP"
  sleep 3
  if systemctl is-active --quiet aaden-gdpdu.service; then
    echo "aaden-gdpdu 已装成 systemd 服务并启动"; exit 0
  fi
  echo "aaden-gdpdu 服务没起来，下次重试"; systemctl status aaden-gdpdu.service --no-pager 2>&1 | tail -5; exit 1
fi

# 没有 systemd：由 cron 每分钟调一次（和守护进程循环做的是同一件事）
TMP=$(mktemp)
cat > "$TMP" <<'EOF'
# aaden-cli auto-write-gdpdu（AadenDeploy/Utils/writeGdpduService.sh）：没有 systemd 的设备由 cron 代替 aaden-gdpdu 守护进程
* * * * * root flock -n /var/tmp/aaden-gdpdu.lock sh -c 'curl -s -o /dev/null --max-time 900 "http://localhost/PHP/ZBon.php?op=writeCombinedZbonClosing"; curl -s -o /dev/null --max-time 300 "http://localhost/PHP/ZBon.php?op=writeZbonLiteral&countLimit=10"'
EOF
sudoS "install -m 644 '$TMP' '$CRON'"
rm -f "$TMP"
echo "没有 systemd，已写入 $CRON（每分钟一次）"
exit 0
