簡體   English   中英

為什么我的Erlang啟動腳本在控制台上運行,但從init系統(sysvinit,upstart,systemd)運行時不起作用?

[英]Why does my Erlang boot script work from console but does not work when run from init system (sysvinit, upstart, systemd)?

我有一個Erlang啟動腳本,我可以像這樣啟動:

/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

日志顯示系統正常引導,然后突然終止,沒有任何類型的錯誤消息。 這到底是怎么回事?

原來你必須將-noinput參數傳遞給erl。 否則它將嘗試打開stdin進行讀取,失敗因為沒有任何內容並且沒有任何類型的錯誤消息而終止。

這有效:

[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

我剛剛設法使用帶有systemd的erlang安裝系統來安裝代碼庫。 此過程符合有關設置嵌入式系統的erlang文檔。 這是我學到的:

1)需要添加路徑以獲取erts / examples中的安裝工具。 以下是我的.erlang文件的摘錄:

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

2)在erlang / doc / 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選項並添加所需的任何erlang運行時參數,如-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工具附加到守護程序以進行維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM