我最近在一台机器上安装了 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....