檢視原始碼 run_erl
在 Unix 系統上重新導向 Erlang 輸入和輸出串流。
說明
run_erl
程式是 Unix 系統專用的。此程式會重新導向標準輸入和標準輸出串流,以便記錄所有輸出。它還允許程式 to_erl
連接到 Erlang 主控台,從而可以遠端監控和除錯嵌入式系統。
有關使用方式的詳細資訊,請參閱系統文件中的嵌入式系統使用者指南。
run_erl [-daemon] pipe_dir/ log_dir "exec command arg1 arg2 ..."
參數
-daemon
- 強烈建議使用此選項。它會使run_erl
在背景中執行,完全與任何控制終端分離,並且命令會立即返回給呼叫者。如果沒有此選項,則必須在 shell 中使用多種技巧才能完全將run_erl
從啟動時使用的終端分離。此選項必須是命令行上run_erl
的第一個參數。pipe_dir
- 具名管道,通常是/tmp/
。它必須以/
(斜線)結尾,即/tmp/epipes/
,而不是/tmp/epipes
。log_dir
- 日誌檔,即一個日誌檔,
run_erl.log
,用於記錄run_erl
程式本身的進度和警告。最多五個日誌檔,每個檔案最大 100 KB,其中包含來自命令的標準串流內容。(日誌數量和大小都可以透過環境變數進行更改,請參閱下面的環境變數章節。)
當日誌滿時,
run_erl
會刪除並重複使用最舊的日誌檔。
"exec command arg1 arg2 ..."
- 一個以空格分隔的字串,指定要執行的程式。第二個欄位通常是命令名稱,例如erl
。
關於日誌檔的注意事項
執行時,run_erl
會將所有輸出以未解釋的方式傳送到日誌檔。該檔案名為 erlang.log.N
,其中 N
是一個整數。當日誌「滿」時(預設日誌大小為 100 KB),run_erl
開始記錄到檔案 erlang.log.(N+1)
,直到 N
達到特定數字(預設為 5),然後 N
會再次從 1 開始,並且開始覆寫最舊的檔案。
如果 Erlang shell 沒有輸出,但 Erlang 機似乎仍然存活,則會在日誌中寫入「ALIVE」訊息;它是一個時間戳記,預設是在閒置 15 分鐘後寫入。此外,如果記錄了來自 Erlang 的輸出,但距離上次從 Erlang 收到任何資料已經超過 5 分鐘(預設),則會在日誌中寫入時間戳記。「ALIVE」訊息如下所示
===== ALIVE <date-time-string>
其他時間戳記如下所示
===== <date-time-string>
date-time-string
是寫入訊息的日期和時間,預設為當地時間(如果需要,可以更改為 UTC)。它使用 ANSI-C 函數 strftime
並使用格式字串 %a %b %e %T %Z %Y
進行格式化,這會產生類似 ===== ALIVE Thu May 15 10:13:36 MEST 2003
的訊息;可以更改此格式,請參閱下一節。
環境變數
run_erl
識別下列環境變數,並會更改記錄行為。有關詳細資訊,請參閱上一節。
RUN_ERL_LOG_ALIVE_MINUTES
- 在將「ALIVE」訊息寫入日誌之前,等待輸出的時間(以分鐘為單位)。預設為 15,最小值為 1。RUN_ERL_LOG_ACTIVITY_MINUTES
- Erlang 需要閒置多長時間,輸出才會加上時間戳記。預設為RUN_ERL_LOG_ALIVE_MINUTES div 3
,最小值為 1。RUN_ERL_LOG_ALIVE_FORMAT
- 指定要在strftime
C 函式庫呼叫中使用的另一個格式字串。也就是說,將其指定為"%e-%b-%Y, %T %Z"
會產生具有類似15-May-2003, 10:23:04 MET
時間戳記的日誌訊息。有關詳細資訊,請參閱 C 函式庫函式strftime
的文件。預設為"%a %b %e %T %Z %Y"
。RUN_ERL_LOG_ALIVE_IN_UTC
- 如果設定為0
以外的任何值,則會使run_erl
顯示的所有時間都以 UTC (GMT、CET、MET,不含日光節約時間) 為單位,而不是以當地時間為單位。這不會影響來自 Erlang 的資料,僅影響run_erl
直接輸出的日誌。可以透過將 Erlang 應用程式變數utc_log
設定為true
來對應用程式 SASL 進行相應的修改。RUN_ERL_LOG_GENERATIONS
- 控制在重複使用舊檔案之前寫入的日誌檔數量。預設為 5,最小值為 2,最大值為 1000。請注意,作為指示最新檔案的方式,
run_erl
會刪除最舊的日誌檔,以在檔案序列中維持一個「洞」。例如,如果存在日誌檔 #1、#2、#4 和 #5,則表示 #2 是最新的,而 #4 是最舊的。因此,您最多會得到比RUN_ERL_LOG_GENERATIONS
設定的值少一個的日誌檔。RUN_ERL_LOG_MAXSIZE
- 在切換到新的日誌檔之前,日誌檔的大小(以位元組為單位)。預設為 100000,最小值為 1000,最大值約為 2^30。RUN_ERL_DISABLE_FLOWCNTRL
- 如果已定義,則會停用run_erl
開啟的 pty 的輸入和輸出流量控制。如果您想消除因使用 Ctrl-S(而不是 Ctrl-D 來分離)意外封鎖流量控制的任何風險,此選項很有用,這可能會導致整個 Beam 程式被封鎖,並且在將心跳作為監督程式執行時,即使心跳程式在寫入日誌訊息到終端時也會被封鎖,導致心跳程式無法執行其工作。