시스템 서비스 스크립트가 에코되지 않습니다.

시스템 서비스 스크립트가 에코되지 않습니다.

저는 최근 systemd init 시스템을 사용하는 컴퓨터에 Fedora 22를 설치했습니다.

나는 그것에 대해 읽었으며 이제 postgresql에 대한 시스템 시작 스크립트를 생성해야 합니다.

테스트를 위해 다음 쉘 스크립트 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

이것은 /usr/lib/systemd/scripts에 넣은 "Hello World 스크립트 시작"을 반영합니다.

그런 다음 아래와 같이 시스템 서비스 스크립트 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.... 

관련 정보