[이것은 systemd-tmpfiles 문제를 직접적으로 다루지는 않지만이 특별한 경우 echo를 사용하는 것이 더 낫다는 것을 이미 알고 있다고 생각합니다.]
우선, "multi-user.target"은 사용하고 싶거나 아닐 수도 있습니다. SysV 스타일 init 항목의 런레벨 개념에 익숙한 경우 다중 사용자는 GUI가 아닌 콘솔로 부팅하는 다중 사용자 시스템 인 런레벨 3에 해당하는 시스템입니다. 실행 레벨 5의 등가, X로 부팅입니다 graphical.target . 기본값은 default.target 이라는 심볼릭 링크 /etc/systemd/system
(및 / 또는 /lib/systemd/system
;에있는 /etc
심볼을 대체 할 것)에 의해 결정되며 ls를 사용하여 해당 위치를 찾습니다./lib
»ls -l /etc/systemd/system/default.target
default.target -> /usr/lib/systemd/system/multi-user.target
일반적인 리눅스 데스크탑의 경우 이것은 graphic.target입니다. 기본 런레벨 / 대상이 무엇이든 관계없이 생성중인 부팅 서비스를 시작하려는 경우 실제로 중요하지 않습니다.이 경우 default.target 만 사용하고 별칭이 무엇인지 걱정하지 않아도됩니다. 그러나 다중 사용자를 사용하고 기본값이 그래픽 인 경우 서비스가 수행되지 않습니다.
서비스에 따라이를 시작하려는보다 적절하고 구체적인 대상 또는 서비스가있을 수 있습니다. 다른 질문에 따르면 default.target이 좋습니다. 참고로 "대상"과 "서비스"의 차이점은 서비스에 [Service]
실제로 프로세스를 실행하는 섹션이 포함되어 있다는 것입니다. 대상은 다양한 "종속"및 "필요"지시문을 통해 서비스를 그룹화하는 방법 일뿐입니다. 다른 대상이나 서비스를 트리거하는 것 외에는 아무것도하지 않습니다.
서비스 시작 시점은 다른 서비스가 명시 적으로 의존하는 서비스에 따라 결정됩니다. 부팅 프로세스에서 늦게 실행하려는 이와 같은 간단한 독립형 이벤트의 경우 다음과 같은 지시문 조합을 사용할 수 있습니다.
[Unit]
After=default.target
[Install]
WantedBy=default.target
"설치"섹션은 서비스가 설치 될 때 사용됩니다. "WantedBy"는이 서비스에 포함 할 대상을 지정합니다 (해당 대상이 실행되는 경우 실행되지만 nb. 다른 대상과 관련하여 실행시기를 결정하지는 않음 ). 실제로이 서비스를 더 빨리 실행하기보다는 나중에 실행하기를 원하므로 "After"절을 지정합니다. 이것은 실제로 WantedBy 대상과 같을 필요는 없으며 (보통 그렇지는 않습니다) 언제 발생하는지 신경 쓰지 않으면 완전히 생략 할 수 있습니다. 나는 직감에 그것을 사용하여 대부분의 다른 것들이 지정된 무언가와 관련이있는 것들과 관련하여 실행될 것입니다 Before=default.target
(우리는 또한 사용할 수 있습니다; 목표가 실행되기 전에 목표의 욕구가 평가됩니다).
예를 들어, "hello world"를 콘솔에 에코합니다. 서비스 자체는 다음 [Service]
섹션에 설명되어 있습니다.
[Service]
Type=forking
ExecStart=/usr/local/bin/helloworld
이 명령에는 전체 경로가 필요합니다. 난 그냥 사용하지 않은 이유는 /usr/bin/echo "hello world"
그렇지 일 것입니다 (출력이 간다, 내가 생각하면 / dev / null로) 및 수행하는 서비스하면서 echo "hello world" > /dev/console
의지를, 실험이 보여 있다는 ExecStart 지시어에 쉘 리디렉션을 사용하지 않습니다 . 따라서 / usr / local / bin / helloworld는 한 줄의 쉘 스크립트입니다 echo "hello world" > /dev/console
.
Type=forking
쉘 스크립트에 필요한를 참고하십시오 .
우리의 완전한 최소한의 서비스 파일이 바로 그 세 부분입니다 ( [Unit]
, [Service]
, 및 [Install]
). 설치하려면 파일 또는 심볼릭 링크를 / etc / systemd / system 또는 / usr / lib / systemd / system에 배치하십시오.
systemctl --system enable helloworld
인쇄해야합니다 ln -s ...
. 이 서비스는 실행되지 않으며 위에서 설명한대로 부팅시 실행되도록 구성합니다.
간단히 말해서. man systemd.unit
및 man systemd.service
자세한 내용이있다.