supervisord
서버에서 서비스를 제어하는 데 사용 하기 시작했습니다 . 나는 리눅스의 프로 사용자는 아니지만 그것을 잘 사용하여 실행할 수 있습니다.
호기심으로, 감독자의 대부분의 명령이 다음과 같이 호출되는 것으로 나타났습니다.
[program:install]
command=bash -c "/src/etc/install.sh"
bash의 사람을 읽었 -c
으며 문자열 뒤에 전달 된 변수를 삽입하는 데 사용해야한다는 것을 알고 있습니다.
따라서 bash -c
전달 / 사용되는 변수가 없다는 것을 고려하여 스크립트를 직접 호출하는 대신 감독자 (또는 다른 장소) 에서 사용하는 요점은 무엇 입니까?
[program:install]
command=/src/etc/install.sh
감사!
답변
쉘 패스 팽창 (같은 기능 *
, ?
), 커맨드리스트 ( ;
, &&
, ||
(), 리디렉션 <
, >
, |
,) 만이 인수 문자열 배열로 명령을 분할한다는 supervisord 구현되지 않는다.
이 bash -c
기능은 명령에서 이러한 기능을 사용하려는 유혹을받는 초보 사용자에게 도움 이 될 수 있습니다. 예를 들어 놀랍게도
command=echo foo > /tmp/bar
foo > /tmp/bar
에 쓰는 대신 출력 foo
합니다 /tmp/bar
.
-c
변수와 거의 관련이 없습니다. 배쉬에 대한 모든 추가 인수는 스크립트 인수로 사용할 것 $0
, $1
명령에 등,하지만 기능은 거의 모든 사용이 없습니다. 예를 들어 bash -c 'echo $0 $0' foo
출력 foo foo
.