시작 스크립트의 다양한 실패에 대한 종료 코드

시작 스크립트의 다양한 실패에 대한 종료 코드

저는 Arch Linux 설치를 실행 중이고 systemd 서비스가 실행 중입니다 /etc/rc.local. 에는 macOS 에서 rc.local.dmesg -D/Volumes

스크립트의 각 명령에 대해 rc.local스크립트가 실패하는지 테스트한 다음 명령줄에 해당하는 숫자로 종료됩니다. 따라서 파일 조각(내 형식을 기억하도록 조정됨)은 다음과 같습니다.

#!/bin/bash

dmesg -D || exit 1
i=2
for name in usb sd
do
    mkdir -p /mnt/${name} || exit ${i}
    i=$((i+1))
done
sysctl -w kernel.kptr_restrict=2 || exit 4

exit 0

이것은 약간 투박하고 종료 코드가 스크립트 할당으로 제한되어야 한다는 인상을 받았지만 종료 값이 인쇄되므로 rc-local.servicesystemd 서비스가 실패한 이유를 확인하는 방법을 아는 유일한 방법 입니다. systemd/가 문자열 등을 전달하는 등 실패한 이유에 대한 정보를 받을 수 있도록 systemctl status rc-local.service코딩하는 다른 방법이 있습니까 ? 그런 다음 입력할 때 문자열이 다음과 같이 나타나는 것을 볼 수 있습니다 .rc.localrc-local.servicerc.localsystemctl status rc-local.service

Error reason: Failed to set kernel.kptr_restrict

답변1

실패(0이 아닌 종료 코드)로 인해 명령(또는 명령이 충돌하는 경우 쉘)은 오류를 인쇄해야 합니다.

systemd는 이러한 오류 메시지를 시스템 로그에 기록합니다. 장점 systemctl status은 서비스의 최신 로그 라인을 표시한다는 것입니다.

http://0pointer.net/blog/projects/systemctl-journal.html

systemctl status편집: syslog는 루트()로 실행하거나 sudo그룹의 구성원인 경우 에만 읽을 수 있습니다 .admsystemd-journal

관련 정보