所有頁面
本頁內容

自動啟動中繼

oar start 會在背景執行中繼,直到你停止它或機器重新啟動。若要讓中繼自己恢復執行,請安裝自動啟動:oar service install 0.9.9 新增 會在 Linux 和 Windows 上完成設定。0.9.15 新增 oar autostart 可以選擇 Windows 的任一種模式——登入時或開機時——而 oar setup 在 Windows 上會詢問這項設定。之後你就不需要開著終端機,在無介面主機上也不必登入。

服務執行的中繼和 oar start 相同:同樣的設定檔、同樣的資料目錄、同樣的記錄資料夾。你的對話不會有任何改變。0.9.14 新增 在 Windows 上,兩種自動啟動模式也是如此;0.9.14 之前,它們把資料放在已安裝的套件內(見 Windows 項目的資料目錄)。

指令 #

oar service install
oar service status
oar service remove

不加任何參數時,預設為 oar service status。這些指令適用於全域安裝;在 git checkout 中,它們會說明這一點,不做任何事。單獨執行 oar 會開啟一個選單,其中的 Install or remove the service(安裝或移除服務)項目做的是同一件事。oar setup --start 以及 macOS 和 Linux 的安裝程式,會在有 systemd 使用者 session 的環境中替你安裝 Linux 服務。

指令 Linux Windows
oar service install 寫入並啟用 systemd 使用者服務、啟用 lingering,並啟動中繼 開啟登入時的自動啟動。它不會立即啟動中繼:請執行 oar start
oar service remove 停止並停用服務,並刪除它的 unit 檔。中繼會停止 關閉登入時的自動啟動。執行中的中繼會繼續執行
oar service status 印出 Service: installed, running、installed, not running 或 not installed 印出 Autostart: on, at boot (scheduled task)、on, at sign-in 或 off

oar service install 需要設定檔:請先執行 oar setup。

0.9.15 新增 oar autostart 直接指定模式,而不是服務:

oar autostart signin    # Windows: at sign-in
oar autostart boot      # Windows: at boot, before anyone signs in
oar autostart off
oar autostart status    # the default when you give no word

在 Windows 上,它是設定兩種模式的指令,規則和 Settings(設定)中的 Autostart (Windows)(自動啟動,Windows)控制項相同。在 Linux 上它就是 oar service:signin 和 boot 都執行 oar service install,off 執行 oar service remove,status 執行 oar service status。在 macOS 上,它會顯示 Autostart is not supported on macOS yet. Start the relay with: oar start。在 git checkout 中,它會說明它只適用於全域安裝。signin 和 boot 需要設定檔;off 和 status 不需要。

Linux:systemd 使用者服務 #

0.9.8 新增

服務名稱是 oar。oar service install 會把它的 unit 檔寫到 ~/.config/systemd/user/oar.service,然後啟用並啟動它。它也會為你的使用者執行 loginctl enable-linger。Lingering 會在沒有人登入時讓你的使用者服務繼續執行,所以中繼在重新開機後會恢復,你登出後也會繼續執行。這些都不需要 sudo。如果無法啟用 lingering,指令會說明,並給出讓你自己執行的那一行,因為沒有 lingering,中繼會在你登出時停止:

loginctl enable-linger "$USER"

這個 unit 會用執行該指令的 Node.js 啟動中繼,並在當機後重新啟動它(Restart=on-failure,5 秒後)。0.9.14 新增 它不會重新啟動以結束代碼 78 停止的中繼(RestartPreventExitStatus=78):中繼無法使用其資料執行時會用這個代碼,例如另一個中繼持有它的鎖時(見無法正常運作時)。較早版本寫入的 unit 沒有這一行,直到你再次執行 oar service install。unit 帶有執行 oar service install 的那個 shell 的 PATH,再加上 ~/.local/bin 和該 Node.js 所在的資料夾,因為 systemd 使用者服務原本會以極簡的 PATH 啟動。中繼的 session 透過它找到供應商 CLI 和 node。你的 PATH 變更後,請再次執行 oar service install,然後執行 oar restart:install 會重寫 unit,但不會重新啟動已在執行的服務。

如果有一個你手動啟動的中繼正在執行,install 會先停止它,讓服務能使用該連接埠。如果那個中繼正在忙、沒有立刻停止,服務仍會安裝,並在下次登入時接手,或在那個中繼停止後你執行 oar start 時接手。

start、stop 和 restart #

安裝服務後,oar start、oar stop 和 oar restart 都會經由 systemd 執行。

指令 作用
oar start 啟用並啟動服務,並印出中繼網址
oar stop 停止服務。服務仍保持啟用,所以下次你的使用者 session 啟動時它會再次啟動:有 lingering 時是開機時,否則是登入時。oar service remove 會將它永久移除
oar restart 重新啟動服務,並印出中繼網址
oar status 說明中繼是否在執行,並將服務顯示為 installed, running(已安裝,執行中)、installed 或 not installed

服務會立即停止

沒有服務時,oar stop 和 oar restart 會等待執行中的回合結束。使用 Linux 服務時則不會。systemd 會立即停止或重新啟動服務,執行中的回合會結束,agent 的背景處理程序也會隨服務一起結束,因為 unit 沒有設定任何能讓它們繼續存活的項目。對話及其佇列會保留,下一則訊息會繼續供應商的 session。重新啟動與繼續說明哪些會恢復。若要重新啟動又不中斷回合,請使用對話 ⋯ 選單中的 Restart web relay(重新啟動網頁中繼),它會等待回合結束。

狀態與記錄 #

systemctl --user status oar

會顯示服務是否在執行。unit 不會重新導向中繼的輸出,所以 systemd 會把它保留在 journal 中:用 journalctl --user -u oar 讀取。

unit 也會把中繼的記錄資料夾設為 OAR 狀態資料夾中的 logs 資料夾(預設為 ~/.oar/logs)。中繼會在那裡以 relay-console.log 保留一份主控台輸出的副本,每個 session worker 則會寫入一個 worker-<session>.log。oar doctor 會印出它們所在的狀態資料夾。

server-err.log

當 oar start 失敗時,它會顯示 The relay did not come up — see …/server-err.log。這個檔案只有在 oar start 自己在背景啟動中繼時才會寫入,服務不會寫入它。安裝服務後,請改看 journal 或 relay-console.log。

Windows #

0.9.2 新增

Windows 有兩種自動啟動模式。兩者都以相同的設定檔執行相同的中繼。

登入時 開機時
這是什麼 你啟動資料夾中的一個腳本,會在你登入時開啟一個標題為 OAR Web Relay 的可見終端機視窗 名為 oar-relay 的排程任務,在任何人登入之前,以你的身分在無介面的狀態下執行中繼。它在開機 30 秒後啟動;如果中繼失敗,最多會重新啟動 5 次,每次間隔一分鐘
中繼何時可連線 你登入之後 開機後約 60 秒,不需要任何人登入
設定方式 oar autostart signin、oar service install、oar setup,或 Autostart (Windows) 控制項 oar autostart boot、oar setup,或 Autostart (Windows) 控制項
權限 只需你自己的權限 開啟和關閉時各需一次系統管理員確認(UAC)
背景中留下什麼 終端機視窗 任務。沒有視窗,也沒有東西要關

控制項位於 ⚙️ Settings → General(設定 → 一般),標示為 Autostart (Windows)。只有在 Windows 上執行的中繼才會顯示它,共有三個選項:

Off
At sign-in — visible terminal after you log on
At system startup — headless, no logon needed

0.9.15 新增 在 Windows 的終端機中,oar setup 會把模式當作最後一個問題詢問,並以目前生效的模式為預設值:

Autostart: 1 = at sign-in, 2 = at boot, before anyone signs in (one administrator prompt), 3 = off [3]:

按 Enter 會維持目前的模式。oar setup --autostart signin|boot|off 可以不經詢問直接設定。如果無法讀取開機任務,setup 就不會詢問。切換沒有成功時,setup 仍會寫入設定檔,並顯示 The config is written; the autostart step did not go through (see above).,然後以結束代碼 1 結束。

每次切換都會移除另一種模式的項目,但只限 OAR 產生的項目(見非 OAR 建立的項目)。

登入時 #

選擇 At sign-in(登入時),或執行 oar autostart signin 或 oar service install。它們都會寫入同一個項目,也就是你啟動資料夾中的 oar-web-relay.cmd,所以指令和控制項的狀態一致。oar autostart off、oar service remove 或 Off(關閉)會刪除它。它們都不會立即啟動中繼:中繼會在你下次登入時啟動,或者你現在用 oar start 啟動它。從開機模式切換到登入模式時,需要系統管理員確認,以移除開機任務。

開機時 #

選擇 At system startup(開機時),或執行 oar autostart boot。註冊開機任務需要系統管理員權限,而中繼執行時不具備這些權限,所以 Windows 會要求一次系統管理員確認;提升權限的部分只有 schtasks 呼叫。這個提示只會出現在這台電腦本機的桌面上。oar autostart 會印出 Confirm the administrator prompt to register the boot task … 並等待。從其他裝置的瀏覽器操作時,Settings 會顯示 Confirm the admin prompt on the PC…(請在電腦上確認系統管理員提示…)。兩者最多都等待兩分鐘;到時仍無人回應的提示視為失敗。任務以你的使用者身分執行,不儲存密碼。本機檔案和 tunnel 照常運作;任務沒有存取網路共用資料夾的憑證。

切換回 Off 或 At sign-in(oar autostart off、oar autostart signin)需要同樣的確認來移除任務。0.9.15 新增 只有在提示已確認、任務已移除之後,控制項才會開啟登入項目。

0.9.15 新增 拒絕提示不會改變任何東西:Nothing changed: the administrator prompt was declined. 先前的模式維持不變,也不會留下任何檔案。如果提示之後切換本身失敗,它會從副本(OAR 資料夾 %APPDATA%\oar 中的 <task>.task.xml.bak)還原它刪除的任務,保留副本並回報失敗。如果提示已確認,但之後無法讀回任務,OAR 會說明這一點並指出副本,不復原任何東西。在網頁介面中,失敗時會顯示問題所在,以及一條可改從提升權限的 PowerShell 執行的指令。

0.9.15 新增 即使你的使用者資料夾路徑含有空格、撇號或非 ASCII 字元(例如 C:\Users\Jürgen),開機模式也能正常開啟和關閉。較早的版本在這種情況下會失敗,或把 OAR 自己的任務當成手動建立的任務。

開機任務會啟動 OAR 產生的啟動器腳本,也就是 OAR 資料夾中的 oar-web-relay-launcher.cmd。0.9.11 新增 啟動器會把 Node.js 的資料夾加到 PATH 的最後。中繼會以完整路徑、用自己的 Node.js 啟動 worker,所以即使任務的 PATH 中沒有 node,worker 也能啟動(agent 處理程序)。

當產生的啟動器不見了,或來自較早的版本時,Settings 會指出差異,而不是回報失敗;再次選擇 At system startup(或執行 oar autostart boot)就會重新產生它。設定變更失敗時,Settings 會顯示中繼回報的原因。如果開機任務旁還有登入項目,設定會警告這可能讓中繼啟動兩次;再次選擇 At system startup 即可清除。

oar service 只會回報這個模式。開機任務存在時,oar service install 和 oar service remove 會拒絕執行,並請你改用 oar autostart signin|off 或 Settings;oar service status 會印出 on, at boot (scheduled task)。

狀態 0.9.15 新增 #

oar autostart status 會印出模式,接著列出每個現有的項目,以及它是否由 OAR 產生:

[oar] Autostart: at boot, before anyone signs in (scheduled task)
[oar]   scheduled task \oar-relay (generated by OAR)
[oar]   C:\Users\dev\AppData\Roaming\oar\oar-web-relay-launcher.cmd (generated by OAR)

模式會是 at sign-in (Startup folder)、at boot, before anyone signs in (scheduled task)、off,或 unknown, the boot task could not be read (<reason>)。手動建立的項目會顯示為 <path> (hand-made),另一個 OAR 安裝留下的項目則顯示為 <path> (hand-made: it starts the OAR install in <folder>)。如果有這類項目,最後一行會說明如何取代它。

非 OAR 建立的項目 0.9.15 新增 #

無論在網頁介面還是 oar autostart 中,OAR 都只會更動與某個 OAR 版本為這個安裝所產生的內容完全相同的自動啟動項目。其他項目一律視為 hand-made,也就是手動建立的項目,絕不會被刪除或覆寫:

  • 你編輯過的啟動資料夾項目,或屬於其他 OAR 安裝或設定檔的項目;
  • 與 OAR 註冊的開機任務在帳戶、執行層級、唯一的動作、唯一的開機觸發程序或設定上有所不同的開機任務;
  • 你編輯過的啟動器;
  • 別人建立、名為 oar-relay 的任務,以及品牌更名前的開機任務。

當手動建立的項目會留在新模式旁邊,或會被新模式取代時,切換不會做任何變更,並會指出該項目:

[oar] Nothing changed: OAR does not delete or overwrite an autostart entry it did not make. Remove it yourself, or replace it keeping a copy: oar autostart boot --replace.
[oar] Left as it is: C:\Users\dev\AppData\Roaming\oar\oar-web-relay-launcher.cmd (hand-made).

網頁介面會顯示同樣的訊息。屬於你所選模式的手動建立項目會用於該模式並保留下來(Left as it is: …)。若要以 OAR 自己的項目取代手動建立的項目,請在切換時加上 --replace:

oar autostart boot --replace

它會先為每個項目保留一份副本,以 <name>.bak 存放在 OAR 資料夾(%APPDATA%\oar):啟動器的副本就在啟動器旁邊;任務的副本是匯出的 XML,存為 <task>.task.xml.bak,可以用 schtasks /create /xml 匯回;啟動資料夾項目的副本也放在那裡,因為留在啟動資料夾中的副本會在登入時被 Windows 開啟。較早的副本絕不會被覆寫:下一份會是 .bak-2。除了 --replace,沒有任何方式會取代手動建立的項目。

OAR 無法讀取的開機任務,例如儲存了另一個帳戶的密碼、回應 Access is denied(拒絕存取)的任務,絕不會被當成不存在。狀態會顯示 unknown, the boot task could not be read (<reason>),而每次切換(包括 --replace)都會以 Nothing changed: the boot task could not be read (<reason>). 停止。

等待 TEMP 和資料磁碟機 0.9.14 新增 #

兩種模式都會在啟動中繼前先等待 %TEMP% 資料夾和資料目錄所在的磁碟機(例如 RAM 磁碟,或由啟動腳本稍後才掛載的磁碟機),總共最多等 5 分鐘。0.9.14 之前,開機模式的啟動器只等 %TEMP% 2 分鐘,登入項目則完全不等。位於網路共用資料夾上的資料目錄不會等待。用引號設定的 TEMP 或 TMP("D:\My Temp"),或指向不存在資料夾的設定,會為中繼自動修正:去掉引號,或改用你自己的暫存資料夾。

等待時間用完時,會有一行指出仍缺少什麼,然後中繼照樣啟動:

[<date> <time>] Still missing after 300 s: data drive "R:\"; starting the relay anyway.

這一行會寫到開機模式啟動器旁的 oar-web-relay-launcher.log;如果是登入項目,則寫到 OAR 資料夾(%APPDATA%\oar)中的 oar-web-relay.log。如果中繼仍無法建立資料目錄,它會停止,以一行訊息指出該資料夾,並以結束代碼 78 結束,而不是輸出錯誤堆疊。

Windows 項目的資料目錄 0.9.14 新增 #

兩種項目都會以 oar start 使用的設定檔、資料目錄和記錄資料夾啟動中繼:在全域安裝上是 %APPDATA%\oar\config.json、%APPDATA%\oar\data 和 %APPDATA%\oar\logs。0.9.14 之前,它們只指定設定檔,所以由它們啟動的中繼會把資料庫、上傳的檔案和記錄放在已安裝套件內的 server\data、server\uploads 和 server\logs:對話和 oar start 的不同,而且下次更新就會消失。從那些版本更新時,請依照升級說明操作。

中繼會在更新後第一次啟動時,自行把 OAR 產生的項目或啟動器(0.9.0 起,也包括品牌更名前的 copilot-remote-web-relay.cmd)更新到最新,不需要系統管理員確認。你編輯過的項目、指向其他設定檔的項目,以及使用自己資料目錄啟動的中繼的項目,都不會被更動。0.9.15 新增 它們算是手動建立的項目:oar autostart <mode> --replace 會取代它們並保留副本(見非 OAR 建立的項目)。在啟動器所啟動的中繼仍在執行時重寫啟動器是安全的。啟動器會把主控台切換為 UTF-8,所以名稱含有非 ASCII 字元的使用者資料夾,路徑也能保持完整。

macOS #

macOS 上目前還沒有服務可用。oar service 會說明這一點,並指出 oar start。重新開機後,請執行 oar start 再次啟動中繼。安裝程式會在背景啟動它。

WSL #

Linux 服務需要 systemd 使用者 session。WSL 發行版只有在開啟 systemd 時才有。如果沒有開啟,oar service install 會停止並提示你:在 /etc/wsl.conf 的 [boot] 下設定 systemd=true,然後從 Windows 用 wsl --terminate <distro> 重新啟動該發行版。在那之前,請使用 oar start。容器或任何沒有 systemd 使用者 session 的 Linux 也一樣。

更新 #

oar update 會要求執行中的中繼自行重新啟動,中繼會在佇列閒置時重新啟動。使用 Linux 服務時也是如此:更新不經過 systemd,所以不會中斷回合。見重新啟動與繼續。服務和自動啟動項目啟動的是已安裝的套件,所以在那次重新啟動後就會執行新版本。更新套件絕不會動到設定檔或資料。0.9.14 新增 唯一的例外是從 Windows 自動啟動的中繼更新到 0.9.14,因為它的資料原本在套件內:見升級說明。

依平台 #

Linux Windows macOS WSL
安裝 oar service install 或 oar autostart oar autostart signin|boot、oar setup、Settings(任一模式);oar service install(登入時) 尚未提供 開啟 systemd 時用 oar service install
執行的是什麼 systemd 使用者服務 oar 啟動資料夾腳本,或排程任務 oar-relay 無 Linux 服務
不登入也能執行 可以,需啟用 lingering 只有 At system startup 否 和 Linux 一樣會啟用 lingering
權限 你自己的權限 登入時模式不需要;開機模式需一次系統管理員確認 不適用 你自己的權限
oar stop 和 oar restart 有服務時立即執行,不等待回合 等待執行中的回合 等待執行中的回合 有服務時立即執行
沒有服務時重新開機後 oar start oar start oar start oar start

無法正常運作時 #

你看到的 該怎麼做
No systemd user session here, so there is no service to install. 容器,或沒有 systemd 的 WSL。請開啟 systemd(見 WSL),或執行 oar start
The service is not supported on macOS yet. 請使用 oar start
systemctl --user enable --now oar failed 查看 systemctl --user status oar 和 journalctl --user -u oar
服務在執行,但 session 說找不到某個工具或 node unit 用的是你安裝時的 PATH。請修正你的 PATH,然後再次執行 oar service install
Could not enable lingering 執行 loginctl enable-linger "$USER"。在那之前,中繼會在你登出時停止
Port 3333 is in use by another program 其他程式,或使用不同 token 的中繼,佔用了該連接埠。請停止它,或用 oar setup --port <port> 選擇其他連接埠,然後執行 oar restart
Linux 伺服器重新開機後中繼不見了 lingering 未啟用。執行 oar service status,然後執行 loginctl enable-linger "$USER"
The relay starts at boot through a scheduled task(Windows) oar service 不會變更開機模式。請使用 oar autostart signin 或 oar autostart off,或 ⚙️ Settings → General → Autostart (Windows)(設定 → 一般 → 自動啟動,Windows)
Nothing changed: OAR does not delete or overwrite an autostart entry it did not make.(Windows) 有手動建立的項目擋住了;下面幾行會指出它。請自行移除,或加上 --replace 執行同樣的切換。見非 OAR 建立的項目
Nothing changed: the administrator prompt was declined.(Windows) 再次執行指令,並在這台電腦本機的桌面上確認提示
Nothing changed: the boot task could not be read (…)(Windows) 通常是 Access is denied:任務儲存了另一個帳戶的密碼。請以系統管理員身分在工作排程器(Task Scheduler)中查看該任務,並自行刪除或修改它
no answer at the administrator prompt within 2 minutes(Windows) 沒有人及時確認提示。稍後才確認的提示仍可能執行切換:請用 oar autostart status 檢查
oar-web-relay-launcher.log 或 oar-web-relay.log 中出現 Still missing after 300 s: …(Windows) 訊息指出的磁碟機或 %TEMP% 資料夾在啟動後 5 分鐘內沒有出現。請檢查掛載它的腳本或程式。見等待 TEMP 和資料磁碟機
中繼以代碼 78 結束,服務也沒有重新啟動它 它無法使用其資料執行:另一個中繼持有鎖、兩個資料庫都有較新的工作,或無法建立資料目錄。結束前的那一行會說明是哪一種情況以及該怎麼做;見疑難排解
更新後,Windows 自動啟動的中繼原本顯示的對話不見了 0.9.14 之前,那個中繼把對話放在套件內。見升級說明

更多啟動問題請見首次執行。若還沒安裝 OAR,請見安裝。