2016-06-03 6 views
3

나는 다음과 같이 실행할 수있는 얼랑 부트 스크립트가 :Erlang 부트 스크립트가 콘솔에서 작동하지만 init 시스템 (sysvinit, upstart, systemd)에서 실행할 때 작동하지 않는 이유는 무엇입니까?

/usr/bin/erl -boot /path/to/my-boot-script 

내가 systemd에서 실행할 때 오류 메시지없이 콘솔에서 실행하면 작동하지만 실패합니다. systemd 유닛 파일은 다음과 같습니다

[Unit] 
Description=My daemon written in Erlang 

[Service] 
Type=simple 
ExecStart=/usr/bin/erl -boot /path/to/my-boot-script 
Restart=always 

[Install] 
WantedBy=multi-user.target 

로그는 시스템이 부팅이 제대로 다음 오류 메시지가 어떤 종류없이 갑자기 종료 있음을 보여준다. 도대체 무슨 일이야?

답변

3

-noinput 매개 변수를 erl에 전달해야한다는 것이 드러났습니다. 그렇지 않으면 읽기 용으로 stdin을 열려고 시도합니다. 아무 것도 없기 때문에 오류 메시지가 나타나지 않고 종료됩니다.

이 작동 : 난 그냥 코드 저장소를 설치하는 systemd와 얼랑 설치 시스템을 사용하여 관리해야

[Unit] 
Description=My daemon written in Erlang 

[Service] 
Type=simple 
ExecStart=/usr/bin/erl -noinput -boot /path/to/my-boot-script 
Restart=always 

[Install] 
WantedBy=multi-user.target 
0

. 이 절차는 임베디드 시스템 설정 관련 오류 지침을 준수합니다. 다음은 내가 배운 것입니다 :

1) erts/examples의 설치 도구를 사용하려면 경로를 추가해야합니다.

code:add_path(filename:join([os:getenv("ROOTDIR"),"lib/sasl-2.6/examples/ebin"])). 

2) 얼랑/문서/system_principles/create_target.html

target_system:create("mysystem"). 

3) 임시로 빌드를 추출에서와 같이 빌드를 수행 : 여기이 내 .erlang 파일에서 발췌 한 것입니다 위치.

target_system:install("code_repository", "/home/tony/Projects/code_repository/release_test"). 

4)는 ERL을 실행하기 시작 시작의 마지막 줄을 편집하고 -daemon 옵션을 제거하고 -sname 또는 -set_cookie처럼 필요한 얼랑 런타임 매개 변수를 추가 : 내 응용 프로그램을 위해 그것은으로 얼랑에서 수행. 이는 erlang/doc/embedded/embedded_solaris.html # idm45326372314928에 설명되어 있습니다.

$ROOTDIR/bin/run_erl /tmp/ $ROOTDIR/log "exec $ROOTDIR/bin/start_erl $ROOTDIR $RELDIR $START_ERL_DATA -sname code_repository" 

5) 위치를 런타임을 설치 (SYS.CONFIG에 대해 잊지 마세요)
6) 다음과 같이 .services 파일을 설정 : 여기 내 시스템에서 편집 된 라인이다. 이 파일은 /etc/systemd/system/code_repository.service에 저장됩니다 간단한 서비스를 실행하고 실패하지 않는 한 반환하지 않는

[Unit] 
Description=Tonys Code Repository Daemon 

[Service] 
Type=simple 
WorkingDirectory=/var/opt/code_repository 
Environment=HOME=/var/opt/code_repository 
ExecStart=/var/opt/code_repository/bin/start 
Restart=yes 

[Install] 
WantedBy=multi-user.target 

-daemon 플래그의 제거는, 간단하게 서비스를 운영하는 것이 필수적이다. 이 절차에서 run_erl을 사용하면 유지 보수를 위해 erlang 도구를 데몬에 연결할 수 있습니다.