Systemd 服务脚本不回显

Systemd 服务脚本不回显

我最近在一台机器上安装了 Fedora 22,它使用 systemd init 系统。

我一直在阅读它,现在我需要为 postgresql 创建一个 systemd 启动脚本

为了进行测试,我创建了以下 shell 脚本 hello_world

#! /bin/sh
#  testing systemctl script

start() {
   echo "Executing Start"
   echo "Testing 01"
   echo "Testing 02"
   echo "Testing 03"
}

stop() {
   echo "Stopping Hello World Script"
}

case "$1" in
   start)
      start
   ;;
   stop)
      stop
   ;;
   restart)
      stop
      sleep 2
      start
   ;; 
   *) exit 1
esac

当我使用终端运行它时,它会按照我的预期运行并回显字符串

. hello_world start

这与“启动 Hello World 脚本”相呼应,然后我将其放入 /usr/lib/systemd/scripts 中

然后我尝试创建 systemd 服务脚本,如下所示,hello_world.service

[Unit]
Description=Hello World Testing Script

[Service]
Type=oneshot
ExecStart=/usr/lib/systemd/scripts/hello_world start
ExecStop=/usr/lib/systemd/scripts/hello_world stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

我将其放入 /usr/lib/systemd/system 并尝试执行

systemctl start hello_world.service

它没有给出任何错误,但当我单独执行 hello_world 脚本时,我没有得到预期的回显字符串。

所以我不知道它是否真的有效,我是否错过了什么?为什么 systemctl 命令不回显脚本中的字符串?

答案1

脚本的输出似乎没有发送到终端,而是重定向到状态命令

服务运行后

# systemctl start hello_world.service

我可以在状态中查看我的输出

# systemctl status hello_world.service

其中将包括脚本的任何输出,如下所示

Apr 28 10:18:00 centos7.adminserv systemd[1]: Starting Hello World Testing S....
Apr 28 10:18:00 centos7.adminserv hello_world[18164]: Executing Start
Apr 28 10:18:00 centos7.adminserv hello_world[18164]: Testing 01
Apr 28 10:18:00 centos7.adminserv hello_world[18164]: Testing 02
Apr 28 10:18:00 centos7.adminserv hello_world[18164]: Testing 03
Apr 28 10:18:00 centos7.adminserv systemd[1]: Started Hello World Testing Sc.... 

相关内容