대답은 변수가 일정 해야하는지 (즉, 사용자가 장치를 가져 와서 수정해서는 안 됨) 또는 변수 (사용자가 설정해야한다고 가정)에 따라 다릅니다.
그것이 당신의 지역 단위이기 때문에, 경계는 상당히 흐릿하고 어느 쪽이든 작동합니다. 그러나 배포를 시작했는데로 끝나면 /usr/lib/systemd/system
이것이 중요해집니다.
상수 값
인스턴스 당 값을 변경할 필요가없는 경우 선호되는 방법은 Environment=
단위 파일에 직접 로 배치하는 것입니다 .
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
이것의 장점은 변수가 유닛과 함께 단일 파일로 유지된다는 것입니다. 따라서 단위 파일이 시스템간에보다 쉽게 이동할 수 있습니다.
변수 값
그러나 sysadmin이 환경 변수의 값을 로컬로 변경해야하는 경우 위의 솔루션이 제대로 작동하지 않습니다. 보다 구체적으로, 단위 파일이 업데이트 될 때마다 새 값을 설정해야합니다.
이 경우 추가 파일이 사용됩니다. 방법 — 일반적으로 배포 정책에 따라 다릅니다.
특히 흥미로운 해결책 중 하나는 /etc/systemd/system/myservice.service.d
디렉토리 를 사용하는 것 입니다. 다른 솔루션과 달리이 디렉토리는 시스템 자체에서 지원되므로 배포 별 경로가 없습니다.
이 경우 다음과 같이 파일을 배치하면 /etc/systemd/system/myservice.service.d/local.conf
단위 파일의 누락 된 부분이 추가됩니다.
[Service]
Environment="FOO=bar baz"
그 후, systemd는 서비스를 시작할 때 두 파일을 병합합니다 (두 파일 systemctl daemon-reload
중 하나를 변경 한 후에 기억하십시오 ). 그리고이 경로는 systemd에서 직접 사용하기 때문에 이것을 사용하지 않습니다 EnvironmentFile=
.
영향을받는 일부 시스템에서만 값을 변경해야하는 경우 두 솔루션을 결합하여 장치에서 직접 기본값을 제공하고 다른 파일에서 로컬 재정의를 제공 할 수 있습니다.
sysconfig
경로가 페도라에 고유하지만 문제는 아치 리눅스에 관한 것입니다. paluh의 답변이 더 흥미 롭습니다