为什么 echo 文本在 systemd 服务中不起作用

为什么 echo 文本在 systemd 服务中不起作用

这个 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

相关内容