这个 Bash 脚本单独运行良好:
#!/bin/bash
OtherIP=172.17.1.2
while [ true ]
do
echo "cannot connect to $OtherIP" >>pgha.log
sleep 2s
psql -h $OtherIP -U checker -c '\l' template1 &>/dev/null
if [ $? -eq 0 ]; then
echo `date` 'Finally,' >>pgha.log
echo 'pgpool is available on host='$OtherIP >>pgha.log
break
fi
done
基本上,当我在服务器 172.17.1.2 上启动 postgresql 时,此脚本会跳出循环并写出最后一句话“pgpool 在 host=172.17.1.2 上可用”。但是当我将此脚本放入 systemd 服务中时,它不再输出pgha.log
,如下所示auto_pgha.service
:
[Unit]
Description=run pgpool after auto_pgha service ## <-change run_XXX.sh
[Service]
Type=oneshot
ExecStart=/root/test1.sh ## <-change run_XXX.sh
[Install]
WantedBy=multi-user.target
公平地说,我也在systemctl status auto_pgha
启用它并重新启动服务器后进行了检查,而 172.17.1.2 服务器没有运行 postgresql,它说activating
● auto_pgha.service - run pgpool after auto_pgha service ## <-change run_XXX.sh
Loaded: loaded (/usr/lib/systemd/system/auto_pgha.service; enabled; vendor preset: disabled)
Active: activating (start) since Fri 2023-06-30 15:30:51 CST; 35s ago
Main PID: 563 (test1.sh)
Tasks: 2 (limit: 4656)
Memory: 1.9M
CPU: 74ms
CGroup: /system.slice/auto_pgha.service
├─ 563 /bin/bash /root/test1.sh ## "<-change" run_XXX.sh
└─3833 sleep 2s
在 172.17.1.2 上启动 postgresql 后,它按预期停止运行,但 pgha.log 中仍没有任何内容 - 事实上,根本没有文件 pgha.log,因为我在重启之前删除了它。我该如何修复此错误?
答案1
在我看来,你的代码看起来不错,除了一个细节。
它不起作用:
echo "cannot connect to $OtherIP" >>pgha.log
预期将发挥作用:
echo "cannot connect to $OtherIP" >> pgha.log