시작 시 시스템 서비스 에코 및 핑이 작동하지 않습니다.

시작 시 시스템 서비스 에코 및 핑이 작동하지 않습니다.

부팅 시 시작되고 특정 로그 네임스페이스와 일부 dmesg를 로컬로 파일에 기록하는 간단한 원슈트 시스템 서비스 파일을 Raspberry Pi에 만들었습니다.

테스트로 로컬에서 스크립트를 실행하면 작동하는 것처럼 보이지만 자동 시작에는 문제가 있으며 전혀 작동하지 않습니다.

테스트 서비스

[Unit]
Description=Test message
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/data/test.sh
StandardOutput=journal

[Install]
WantedBy=multi-user.target

시스템은 간단하고 콘텐츠가 많지 않습니다. 루트 사용자만 존재합니다.

또한 시스템은 로그에 기록되고 LogNamespace=temp_logger를 갖는 온도 로거를 시작합니다. 나는 그것을 의존성이나 다른 것에 넣지 않았습니다.

이제 다음을 포함하는 test.sh 파일을 실행하면:

#!/bin/bash

echo $(date)
TEST_DIR=/data/testdirectory

mkdir -p $(TEST_DIR)

journalctl -f --namespace=temp_logger > ${TEST_DIR}/journaltemp.log &

dmesg -w > ${TEST_DIR}/dmesg.log &


아주 잘 작동하는 것 같습니다. 오류도 없고 아무것도 없습니다. 좋아 보인다. 서비스를 활성화 systemctl enable test하고 시스템을 재부팅하면 일부 문제가 발생하는 것 같습니다.

디렉터리가 생성되지 않고 로그 파일이 존재하지 않습니다. (테스트에서 삭제했습니다)

확인해 보면 systemctl status testecho, mkdir 등의 명령을 찾을 수 없다는 오류 메시지가 표시됩니다.

echoor 등의 모든 호출을 etc mkdir로 수정하면 작동하는 것 같습니다. 에코, 날짜 및 디렉토리를 얻습니다. 명령을 사용하여 바이너리에 대한 모든 호출을 확인 하고 경로를 조정했습니다./bin/echo/bin/mkdirwhich

그러나 로깅이 작동하지 않는 것 같습니다. 파일이 있지만 내용이 없습니다(크기 0).

무슨 문제가 있었나요? 바이너리에 대한 절대 경로를 제공해야 하는 이유는 무엇입니까? 왜 Journalctl이 작동하지 않습니까?

답변1

서비스에는 단순한 종속성이 있으며 로깅 서비스 자체가 시작되기 전에 시작되는 것으로 나타났습니다.

아마도 파일이 거기에 있는 이유일 것입니다. 그러나 크기는 항상 0입니다. lsofdmesg.log 또는 Journaltemp.log 파일을 표시하는 프로세스가 없습니다.

나는 sleep 5test.sh 파일의 시작 부분에 좋은 ol'을 넣었고 그때부터 작동했습니다.

나중에 시작할 서비스 파일에 로그를 설정하면 더 좋고 깔끔한 솔루션이 있을 수 있지만 알아낼 수는 없습니다. 잘 자고 이제 내 test.sh의 일부입니다.

관련 정보