템플릿 systemctl이 중지되었는지 확인하는 방법

템플릿 systemctl이 중지되었는지 확인하는 방법

내 문제는 다음과 비슷하다고 생각합니다.

https://askubuntu.com/questions/941775/stopped-custom-services-control-by-systemd-do-not-appear-in-systemctl-list-un

하지만 유용한 답변을 얻지 못해 다시 시도했습니다!

나에게 필요한 것은 중지된 템플릿 서비스가 시작된 적이 있는지 알 수 있는 것입니다.

이것은 내 서비스입니다.

$ cat /etc/systemd/system/[email protected] 
[Unit]
Description=Systemctl Example
StartLimitIntervalSec=0
StartLimitBurst=0

[Service]
ExecStart=/bin/echo %i >> /opt/template.log
Restart=always
RestartSec=1s

[Install]
WantedBy=multi-user.target

서비스 인스턴스를 시작했다가 중지하면 해당 인스턴스가목록 단위목록:

$ sudo systemctl start example@100
$ sudo systemctl start example@200
$ sudo systemctl stop example@200
$ systemctl list-units --full --all --plain --no-legend --no-pager|grep example
[email protected]                                                                                                loaded    activating auto-restart Systemctl Example
system-example.slice                                                                                               loaded    active     active       Slice /system/example
$ service example@100 status[email protected] - Systemctl Example
     Loaded: loaded (/etc/systemd/system/example@ [...]
     Active: activating (auto-restart) since Wed 2022-11-02 11:20:54 CET; 799ms ago
    Process: 41042 ExecStart=/bin/echo 100 >> /opt/template.log (code=exited, status=0/SUCCESS)
   Main PID: 4102 (code=exited, status=0/SUCCESS)
        CPU: 1ms
nov. 02 11:20:54 systemd[1]: Started Systemctl Example.
nov. 02 11:20:55 echo[41042]: 100 >> /opt/template.log
nov. 02 11:20:54 systemd[1]: [email protected]: Deactivated successfully.

"비템플릿" 서비스와 동일한 동작이 예상됩니다.

$ sudo systemctl stop bluetooth
$ systemctl list-units --full --all --plain --no-legend --no-pager|grep bluetooth
bluetooth.service                                                                                               loaded    inactive   dead         Bluetooth service
bluetooth.target                                                                                                loaded    active     active       Bluetooth Support

이것상태서비스가 템플릿인지 아닌지에 대한 옵션은 매우 다릅니다.

$ systemctl status bluetooth
○ bluetooth.service - Bluetooth service
     Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Mon 2022-10-31 11:47:25 CET; 2min 18s ago
       Docs: man:bluetoothd(8)
    Process: 1071 ExecStart=/usr/lib/bluetooth/bluetoothd (code=exited, status=0/SUCCESS)
   Main PID: 1071 (code=exited, status=0/SUCCESS)
     Status: "Powering down"
        CPU: 56ms

$ systemctl status example@200 # this service instance has just been stopped[email protected] - Systemctl Example
     Loaded: loaded (/etc/systemd/system/[email protected]; disabled; vendor preset: enabled)
     Active: inactive (dead)

$ systemctl status toto@2000 # this service instance has never been started[email protected] - Systemctl Example
     Loaded: loaded (/etc/systemd/system/[email protected]; disabled; vendor preset: enabled)
     Active: inactive (dead)

템플릿 서비스에 "xxxxxx부터; Y분 전"이 누락된 이유는 무엇입니까?

Ubuntu 22.04를 사용하고 있는데 Ubuntu 18.04에서도 동일한 문제가 있습니다.

$ systemctl --version
systemd 249 (249.11-0ubuntu3.6)

답변1

이는 다음 사항에 도움이 될 수 있습니다.

sudo journalctl -xe -u example@200

그러면 장치에 대한 로그가 표시됩니다(시작, 종료, 중지 등과 같은 이벤트는 이 명령으로 처리됨).

예를 들어 제 경우에는 장치를 중지 [email protected]하고 실행했을 때 다음과 같은 출력을 얻었습니다.sudo journalctl -xe -u [email protected]

Oct 31 20:53:11 localhost.localdomain systemd[1]: Stopping Getty on tty1...
░░ Subject: A stop job for unit [email protected] has begun execution
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
░░ A stop job for unit [email protected] has begun execution.
░░ 
░░ The job identifier is 13406.
Oct 31 20:53:11 localhost.localdomain systemd[1]: [email protected]: Deactivated successfully.
░░ Subject: Unit succeeded
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
░░ The unit [email protected] has successfully entered the 'dead' state.
Oct 31 20:53:11 localhost.localdomain systemd[1]: Stopped Getty on tty1.
░░ Subject: A stop job for unit [email protected] has finished
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░ 
░░ A stop job for unit [email protected] has finished.
░░ 
░░ The job identifier is 13406 and the job result is done

따라서 grep위의 출력을 기반으로 장치가 중지되었는지 확인할 수 있습니다. 그러나 날짜와 시간을 기준으로 grep해야 할 수도 있습니다.

어떤 경우에는 단위가 자체적으로 성공적으로 완료되었을 수도 있습니다. 따라서 다음과 같은 메시지를 표시하지 마십시오 Stopped. Stopping그렇지 않으면 Deactivated출력은 다음과 유사합니다 Finished X unit... Subject: A start job for unit UNIT has finished successfully.

팁 1
특정 날짜/시간에서 또는 특정 날짜/시간으로의 Journalctl 출력을 얻으려면 인수를 사용할 수 있습니다 --since. --until출력을 grep하려면 해당 옵션을 사용할 수 있습니다 --grep(이렇게 하면 이와 같은 파이프 사용을 피할 수 있습니다 journalctl ... | grep something). ~에 따르면man journalctl

-S, --이후=, -U, --until=

각각 지정된 날짜 또는 그 이후에 항목 표시를 시작하거나, 지정된 날짜 또는 이전에 항목 표시를 시작합니다. 날짜 지정은 "2012-10-30 18:17:16" 형식이어야 합니다. 시간 부분을 생략하면 "00:00:00"으로 간주됩니다. 초 부분만 생략하면 ":00"으로 간주됩니다. ...

-g, --grep=

MESSAGE= 필드가 지정된 정규식과 일치하는 항목으로 출력을 필터링합니다. PERL 호환 정규식 사용

따라서 다음과 같은 것을 사용하여 특정 항목을 얻을 수 있습니다.

sudo journalctl -xe -u [email protected] --since='2022-11-02 12:14'  --grep='Stopped'

팁 2:
당신이 사용하는 경우사용자 단위(~/.config/systemd/user/에 위치) 다음을 사용해야 합니다 journalctl -xe --user -u example@200. sudo를 사용하는 경우사용자 단위해당 명령에서 로그를 볼 수 없을 수도 있습니다(sudo를 사용하여 로그를 표시하도록 구성할 수 있는지 확실하지 않습니다).

관련 정보