내 문제는 다음과 비슷하다고 생각합니다.
하지만 유용한 답변을 얻지 못해 다시 시도했습니다!
나에게 필요한 것은 중지된 템플릿 서비스가 시작된 적이 있는지 알 수 있는 것입니다.
이것은 내 서비스입니다.
$ 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를 사용하여 로그를 표시하도록 구성할 수 있는지 확실하지 않습니다).