시스템 서비스에 둘 이상의 인수를 제공 할 수 있습니까?
최종 사용자가 결정 해야하는 여러 인수가있는 프로그램을 실행하고 싶습니다.
예 : ./program arg1 arg2
단일 인수 앱을 시작하려면 systemctl start arg1@program
서비스 정의에서 내가 가지고있는 것과 같은 것이 필요합니다 ExecStart = /usr/bin/program ℅i
.
감사!
시스템 서비스에 둘 이상의 인수를 제공 할 수 있습니까?
최종 사용자가 결정 해야하는 여러 인수가있는 프로그램을 실행하고 싶습니다.
예 : ./program arg1 arg2
단일 인수 앱을 시작하려면 systemctl start arg1@program
서비스 정의에서 내가 가지고있는 것과 같은 것이 필요합니다 ExecStart = /usr/bin/program ℅i
.
감사!
답변:
그래 넌 할수있어! 파일을 어딘가에 정의하고 시스템 EnvironmentFile
서비스에 추가 하십시오. 예를 들어, /etc/.progconf의 내용은 다음과 같습니다.
ARG1=-o
ARG2=--verbose
그리고 .service 파일 :
EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2
이동 중에 파일을 변경해야하는 경우 해당 파일에 쓸 수 있습니다. 서비스는 옵션을 자주 변경해서는 안되며, 자동 시작 또는 cron을 고려해야 할 수도 있습니다.
더 많은 예제를 보려면 https://wiki.archlinux.org/index.php/Systemd/Services를 확인하십시오.
VAR1=... VAR2=... systemctl start foobar.service
를 전달할 수 있습니까?
PassEnvironment
지시자는 있지만에서 변수 소요 systemd
되지에서 처리 (보통 PID 1) systemctl
. systemctl
프로세스의 환경 변수 는 시작되는 서비스로 전파되지 않습니다.
나는 똑같은 일을하고 싶었지만 인수의 각 조합에 대해 별도의 파일이 없었습니다. 공백으로 하나의 긴 인수를 전달한 다음 systemd의 환경 변수 공간 분할 기능을 사용하여 인수를 분리 할 수 있음을 발견했습니다.
파일 이름으로 서비스를 만들었습니다 argtest@.service
( 서비스가 인수를 취할 때 필요한 'at sign'에주의하십시오 ).
[Unit]
Description=Test passing multiple arguments
[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS
나는 이것을 실행 sudo systemctl start argtest@"arg1 arg2 arg3".service
하고 그것을 통과 arg1
, arg2
및 arg3
test.py.에 별도의 명령 행 인수로
Wants=argtest@"arg1 arg2".service
했고 첫 번째 논쟁 만 통과되었습니다.