저는 최근 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....