다음과 같은 시작 스크립트가 있습니다. 이를 시스템 서비스로 변환하려면 어떻게 해야 합니까?
description "x11vnc"
start on runlevel [2345]
stop on runlevel [^2345]
#console log
respawn
respawn limit 20 5
exec /usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /root/.vnc/passwd -rfbport 5900 -shared
답변1
upstart 구성의 일부 구성 옵션은 systemd 단위 지시문으로 직접 변환될 수 있습니다. 이런 일이 일어난다 description
(이게 된다Description=
) 그리고 exec
(되다ExecStart=
.)
expect fork
시작 구성에는 또는 daemon
섹션(으로 변환됨)이 없으므로 systemd 장치를 Type=forking
사용해야 합니다 .Type=simple
나머지 섹션을 살펴보겠습니다.
start on runlevel [2345]
stop on runlevel [^2345]
이는 본질적으로 시스템이 부팅될 때 서비스가 시작되고 시스템이 종료될 때 중지되어야 함을 의미합니다. systemd에서는 이를 설치하고 최종 장치에 대한 섹션을 multi-user.target
참조하여 수행됩니다.[Install]
#console log
이것은 주석 처리되어 있지만 다음을 사용하여 시스템 장치에서 유사한 구성을 제어할 수 있습니다.StandardOutput=
그리고 관련 옵션.
upstart에서는 console logged
로그에 출력을 보내는 시스템 기본값과 어느 정도 일치하는 기본값입니다(로그는 시스템 세계의 주요 로거이기 때문입니다).
respawn
respawn limit 20 5
따라서 첫 번째 줄은 서비스를 다시 시작하도록 요청합니다.예기치 않게 종료된 경우, 나는 이것이 다음과 같이 해석된다고 믿습니다.Restart=on-failure
, 비록 (항상 다시 시작하는 것)이 아마도 Restart=yes
여기서 upstart가 수행하는 작업에 더 가까울 것입니다(정확히 무엇을 하는지 말할 만큼 upstart를 알지 못합니다.)
두 번째 줄은 5초 내에 최대 20회 재생이라는 제한을 나타냅니다. 이 제한은 systemd에서 구성할 수 있습니다.StartLimitBurst=20
그리고StartLimitIntervalSec=5
.
마지막으로 모든 것을 하나로 합치면 /etc/systemd/system/x11vnc.service
파일에 다음이 포함됩니다.
[Unit]
Description=x11vnc
StartLimitBurst=20
StartLimitIntervalSec=5
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /root/.vnc/passwd -rfbport 5900 -shared
Restart=on-failure
[Install]
WantedBy=multi-user.target
파일 생성 후 systemctl daemon-reload
systemd를 실행하여 유닛 파일을 로드합니다. 그런 다음 systemctl start x11vnc.service
실행을 시작하고 systemctl enable x11vnc.service
부팅 시 시작합니다.