リレーを自動で起動する
oar start は、停止するかマシンが再起動するまで、リレーをバックグラウンドで実行します。リレーが自動で戻ってくるようにするには、自動起動をインストールします。oar service install 0.9.9 で追加 は Linux と Windows で自動起動を設定します。0.9.15 で追加 oar autostart は Windows のどちらかのモード(サインイン時または起動時)を選び、Windows では oar setup がこれを尋ねます。その後はターミナルを開いておく必要がなく、ヘッドレスのホストではログインする必要もありません。
サービスは oar start と同じリレーを実行します。設定ファイル、データフォルダー、ログフォルダーも同じです。会話には何も変わりはありません。0.9.14 で追加 Windows では、これは 2 つの自動起動モードのどちらにも当てはまります。0.9.14 より前は、どちらのモードもデータをインストールされたパッケージの中に保存していました(Windows のエントリのデータフォルダーを参照)。
コマンド #
oar service install
oar service status
oar service remove
単語を付けない場合は oar service status が既定です。これらのコマンドはグローバルインストール向けです。git チェックアウトではその旨を表示し、何もしません。oar だけを実行するとメニューが開き、同じことを行う項目 Install or remove the service(サービスをインストールまたは削除)があります。oar setup --start と macOS・Linux 用のインストーラーは、systemd のユーザーセッションがある環境では Linux サービスを自動でインストールします。
| コマンド | Linux | Windows |
|---|---|---|
oar service install |
systemd のユーザーサービスを書き込んで有効にし、lingering を有効にして、リレーを起動します | サインイン時の自動起動をオンにします。リレーをすぐには起動しません。oar start を実行してください |
oar service remove |
サービスを停止して無効にし、ユニットファイルを削除します。リレーは停止します | サインイン時の自動起動をオフにします。実行中のリレーはそのまま動き続けます |
oar service status |
Service: installed, running、installed, not running、not installed のいずれかを表示します |
Autostart: on, at boot (scheduled task)、on, at sign-、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 mac と表示します。git チェックアウトでは、グローバルインストール向けであることを表示します。signin と boot には設定ファイルが必要ですが、off と status には不要です。
Linux の systemd ユーザーサービス #
0.9.8 で追加
サービスの名前は oar です。oar service install はユニットファイルを ~/. に書き込み、有効にして起動します。また、ユーザーに対して loginctl enable- も実行します。lingering を有効にすると、誰もログインしていない間もユーザーサービスが動き続けるため、再起動後にリレーが戻り、ログアウト後も動き続けます。ここでは sudo は一切不要です。lingering を有効にできない場合、コマンドはその旨を表示し、自分で実行する行を示します。lingering がないと、ログアウトしたときにリレーが停止するためです。
loginctl enable-linger "$USER"
ユニットは、コマンドを実行した Node.js でリレーを起動し、クラッシュ後に再起動します(Restart=、5 秒後)。0.9.14 で追加 終了コード 78 で停止したリレーは再起動しません(Restart)。リレーは自分のデータで動作できないとき、たとえば別のリレーがロックを保持しているときに、このコードを使います(うまくいかないときを参照)。以前のバージョンが書き込んだユニットには、oar service install を再度実行するまでこの行がありません。ユニットには、oar service install を実行したシェルの PATH に加えて、~/. とその Node.js のフォルダーが含まれます。そうしないと、systemd のユーザーサービスは最小限の PATH で起動するためです。リレーのセッションは、これを通じてプロバイダーの CLI と node を見つけます。PATH を変更した後は、oar service install を再度実行してから oar restart を実行してください。install はユニットを書き直しますが、すでに実行中のサービスは再起動しないためです。
手動で起動したリレーが実行中の場合、install はサービスがポートを使えるように、まずそのリレーを停止します。そのリレーがビジー状態ですぐに停止しない場合でも、サービスはインストールされ、次回のログイン時、またはリレーの停止後に oar start を実行したときに引き継ぎます。
start、stop、restart #
サービスをインストールした状態では、oar start、oar stop、oar restart は systemd を経由します。
| コマンド | 動作 |
|---|---|
oar start |
サービスを有効にして起動し、リレーの URL を表示します |
oar stop |
サービスを停止します。サービスは有効のままなので、次にユーザーセッションが始まるとき(lingering があれば起動時、なければログイン時)に再び起動します。完全に取り除くには oar service remove を使います |
oar restart |
サービスを再起動し、リレーの URL を表示します |
oar status |
リレーが実行中かどうかを示し、サービスを installed, running(インストール済み、実行中)、installed、not installed のいずれかで表示します |
サービスはすぐに停止する
サービスがない場合、oar stop と oar restart は実行中のターンが終わるのを待ちます。Linux サービスでは待ちません。systemd はサービスを即座に停止または再起動し、実行中のターンは終了します。ユニットにはエージェントのバックグラウンドプロセスを生かし続ける設定がないため、それらのプロセスもサービスとともに終了します。会話とそのキューは保持され、次のメッセージでプロバイダーのセッションが再開されます。何が戻るかは再起動と再開で説明しています。ターンを中断せずに再起動するには、会話の ⋯ メニューにある Restart web relay(Web リレーを再起動)を使ってください。こちらはターンが終わるのを待ちます。
状態とログ #
systemctl --user status oar
上のコマンドは、サービスが実行中かどうかを表示します。ユニットはリレーの出力をリダイレクトしないため、systemd はそれをジャーナルに保存します。journalctl --user -u oar で読めます。
ユニットは、リレーのログフォルダーを OAR の状態フォルダーの logs フォルダー(既定では ~/.)にも設定します。リレーはそこにコンソールのコピーを relay- として保存し、各セッションワーカーは worker-<session>. を書き込みます。oar doctor は、これらが置かれている状態フォルダーを表示します。
server-err.log
oar start が失敗すると、The relay did not come up — see …/ と表示されます。このファイルは、oar start 自身がリレーをバックグラウンドで起動したときにだけ書き込まれ、サービスでは書き込まれません。サービスをインストールしている場合は、代わりにジャーナルか relay- を読んでください。
Windows #
0.9.2 で追加
Windows には 2 つの自動起動モードがあります。どちらも同じ設定ファイルで同じリレーを実行します。
| サインイン時 | 起動時 | |
|---|---|---|
| 内容 | サインイン時に OAR Web Relay というタイトルの見えるターミナルウィンドウを開く、スタートアップフォルダー内のスクリプト | 誰もサインインする前に、ヘッドレスでリレーをユーザー本人として実行する oar- という名前のスケジュールされたタスク。起動の 30 秒後に開始し、リレーが失敗した場合は 1 分間隔で最大 5 回再起動されます |
| リレーに接続できるタイミング | サインインした後 | 起動から約 60 秒後(誰もサインインしていなくても) |
| 設定方法 | oar autostart signin、oar service install、oar setup、または Autostart (Windows) コントロール |
oar autostart boot、oar setup、または Autostart (Windows) コントロール |
| 権限 | 自分の権限のみ | オンにするときとオフにするときに、それぞれ 1 回の管理者確認(UAC) |
| バックグラウンドに残るもの | ターミナルウィンドウ | タスク。ウィンドウはなく、閉じるものもありません |
このコントロールは ⚙️ Settings → General(設定 → 一般)にあり、Autostart (Windows) というラベルが付いています。Windows のリレーでのみ表示され、3 つの選択肢があります。
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- を書き込むため、コマンドとコントロールの状態は一致します。oar autostart off、oar service remove、または Off(オフ)で、このエントリは削除されます。どれもリレーをすぐには起動しません。リレーは次回のサインイン時に起動するか、oar start で今すぐ起動します。起動モードからサインイン時に切り替えるには、起動タスクを削除するための管理者確認が必要です。
起動時 #
At system startup(起動時)を選ぶか、oar autostart boot を実行します。起動タスクの登録には管理者権限が必要ですが、リレーは管理者権限なしで動作するため、Windows は管理者確認を 1 回求めます。昇格して実行されるのは schtasks の呼び出しだけです。確認のプロンプトは PC 本体のデスクトップにだけ表示されます。oar autostart は Confirm the administrator prompt to register the boot task … と表示して待機します。別のデバイスのブラウザーからは、Settings に Confirm the admin prompt on the PC…(PC で管理者の確認に応答してください…)と表示されます。どちらも最大 2 分間待ち、それまでに誰も応答しなかったプロンプトは失敗として扱われます。タスクはパスワードを保存せずにユーザー本人として実行されます。ローカルファイルとトンネルは通常どおり動作しますが、タスクにはネットワーク共有用の認証情報がありません。
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%\ 内の <task>.)から元に戻し、コピーを保持したうえで失敗を報告します。プロンプトは承認されたものの、その後タスクを読み戻せない場合、OAR はその旨を表示してコピーの名前を示し、何も元に戻しません。Web UI では、失敗すると問題の内容と、代わりに管理者権限の PowerShell で実行するコマンドが表示されます。
0.9.15 で追加 起動モードは、プロファイルのパスにスペース、アポストロフィ、ASCII 以外の文字(例:C:\)が含まれていても、オンとオフを切り替えられます。以前のバージョンではこの場合に失敗するか、OAR 自身のタスクを手動で作成されたものと誤認していました。
起動タスクは、OAR が生成するランチャースクリプト(OAR フォルダー内の oar-)を起動します。0.9.11 で追加 ランチャーは Node.js のフォルダーを PATH の末尾に追加します。リレーはワーカーを自分の Node.js からフルパスで起動するため、タスクの PATH に node がなくてもワーカーは起動します(エージェントのプロセス)。
生成されたランチャーがない、または以前のバージョンのものである場合、Settings は失敗として報告する代わりに違いを示します。At system startup をもう一度選ぶ(または oar autostart boot を実行する)と再生成されます。設定の変更が失敗した場合、Settings はリレーが示す理由を表示します。起動タスクと並んでサインイン時のエントリが存在する場合、リレーが 2 回起動する可能性があると設定が警告します。整理するには 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-、at boot, before anyone signs in (scheduled task)、off、unknown, the boot task could not be read (<reason>) のいずれかです。手動で作成されたエントリは <path> (hand- と表示され、別の OAR インストールが残したエントリは <path> (hand- と表示されます。そうしたエントリがある場合は、最後の行に置き換え方法が示されます。
OAR が作成していないエントリ 0.9.15 で追加 #
OAR が変更するのは、OAR のいずれかのバージョンがこのインストール用に生成したとおりの自動起動エントリだけです。これは Web UI でも oar autostart でも同じです。それ以外のエントリはすべて hand-made と見なされ、削除も上書きもされません。
- 自分で編集したスタートアップのエントリ、または別の OAR インストールや設定ファイルのエントリ
- OAR が登録するものと、アカウント、実行レベル、1 つのアクション、1 つの起動トリガー、設定のいずれかが異なる起動タスク
- 自分で編集したランチャー
- 他の誰かが作成した
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).
Web UI にも同じメッセージが表示されます。選んだモードの手動で作成されたエントリは、そのモードとして機能し、そのまま残ります(Left as it is: …)。手動で作成されたエントリを OAR 自身のものに置き換えるには、--replace を付けて切り替えを実行します。
oar autostart boot --replace
この場合、まず各エントリのコピーを、OAR フォルダー(%APPDATA%\)内に <name>. として保存します。ランチャーのコピーはランチャーの隣に保存されます。タスクのコピーは、エクスポートした XML が <task>. として保存され、schtasks / で元に戻せます。スタートアップのエントリのコピーも同じ場所に保存されます。スタートアップフォルダーにコピーを残すと、Windows がサインイン時にそれを開いてしまうためです。以前のコピーが上書きされることはなく、次のコピーは . になります。手動で作成されたエントリを置き換えるのは --replace だけです。
たとえば別のアカウントのパスワードを保存していて Access is denied(アクセスが拒否されました)と応答する起動タスクのように、OAR が読み取れない起動タスクが、存在しないものとして扱われることはありません。状態は 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:\)、または存在しないフォルダーを指すものは、リレー用に修正されます。引用符が外されるか、ユーザー自身の一時フォルダーが使われます。
待機時間が切れると、まだ見つからないものを示す行が 1 行出力され、リレーはそのまま起動します。
[<date> <time>] Still missing after 300 s: data drive "R:\"; starting the relay anyway.
この行は、システム起動時のランチャーの場合はその隣の oar- に、サインイン時のエントリの場合は OAR フォルダー(%APPDATA%\)内の oar- に書き込まれます。それでもデータフォルダーを作成できないリレーは、エラーのトレースの代わりに、そのフォルダーを示す 1 行を出力し、終了コード 78 で停止します。
Windows のエントリのデータフォルダー 0.9.14 で追加 #
どちらのエントリも、oar start が使うのと同じ設定ファイル、データフォルダー、ログフォルダーでリレーを起動します。グローバルインストールでは %APPDATA%\、%APPDATA%\、%APPDATA%\ です。0.9.14 より前は設定ファイルしか指定していなかったため、これらが起動したリレーは、データベース、アップロード、ログをインストールされたパッケージ内の server\、server\、server\ に保存していました。つまり oar start とは別の会話になり、次の更新で消えていました。これらのバージョンからは、アップグレードの注意点に従って更新してください。
OAR が生成したエントリやランチャー(0.9.0 以降。リブランド前の copilot- も含む)は、更新後の最初の起動時に、リレーが管理者確認なしで自動的に最新の状態にします。自分で編集したエントリ、別の設定ファイルを指すエントリ、独自のデータフォルダーで起動されたリレーのエントリは、そのまま残されます。0.9.15 で追加 これらは手動で作成されたものとして扱われ、oar autostart <mode> --replace でコピーを残して置き換えられます(OAR が作成していないエントリを参照)。起動したリレーがまだ動作中でも、ランチャーを書き直して問題ありません。ランチャーはコンソールを UTF-8 に切り替えるため、名前に ASCII 以外の文字を含むユーザーフォルダーでもパスが壊れません。
macOS #
macOS ではまだサービスを利用できません。oar service はその旨を表示し、oar start を案内します。再起動後は、oar start を実行してリレーを再び起動してください。インストーラーはリレーをバックグラウンドで起動します。
WSL #
Linux サービスには systemd のユーザーセッションが必要です。WSL のディストリビューションにこれがあるのは、systemd がオンになっている場合だけです。オンになっていない場合、oar service install はヒントを表示して停止します。/ の [boot] の下に systemd= を設定し、Windows から wsl --terminate <distro> でディストリビューションを再起動してください。それまでは oar start を使います。コンテナーや、systemd のユーザーセッションがないその他の 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- |
なし | Linux サービス |
| ログインなしで動作 | はい(lingering を有効にした場合) | At system startup のみ | いいえ | Linux と同様に lingering が有効になります |
| 権限 | 自分の権限 | サインイン時は不要、起動時は管理者確認 1 回 | 該当なし | 自分の権限 |
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 mac |
oar start を使います |
systemctl --user enable --now oar failed |
systemctl --user status oar と journalctl --user -u oar を確認します |
サービスは動作しているが、セッションでツールや node が見つからないと表示される |
ユニットには、インストールしたときの PATH が入っています。PATH を修正してから、oar service install を再度実行します |
Could not enable lingering |
loginctl enable- を実行します。それまでは、ログアウトするとリレーが停止します |
Port 3333 is in use by another program |
別のプログラム、または別のトークンを持つリレーがポートを使用しています。それを停止するか、oar setup --port <port> で別のポートを選んでから oar restart を実行します |
| Linux サーバーで再起動後にリレーがなくなっている | lingering がオフです。oar service status を実行してから、loginctl enable- を実行します |
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) |
コマンドをもう一度実行し、PC 本体のデスクトップでプロンプトを承認します |
Nothing changed: the boot task could not be read (…)(Windows) |
多くの場合 Access is denied で、タスクに別のアカウントのパスワードが保存されています。管理者としてタスク スケジューラでタスクを確認し、自分で削除または変更します |
no answer at the administrator prompt within 2 minutes(Windows) |
時間内に誰もプロンプトを承認しませんでした。後から承認されたプロンプトによって切り替えが実行される場合があります。oar autostart status で確認してください |
oar- または oar- に Still missing after 300 s: … がある(Windows) |
示されたドライブまたは %TEMP% フォルダーが、起動から 5 分以内に用意されませんでした。それをマウントするスクリプトやプログラムを確認します。TEMP とデータドライブの待機を参照してください |
| リレーが終了コード 78 で終了し、サービスが再起動しない | リレーが自分のデータで動作できませんでした。別のリレーがロックを保持している、2 つのデータベースの両方に新しい作業がある、またはデータフォルダーを作成できない、のいずれかです。終了直前の行に、どれに当たるかと対処方法が示されます。トラブルシューティングを参照してください |
| 更新後、Windows の自動起動のリレーで表示されていた会話がなくなった | 0.9.14 より前は、そのリレーは会話をパッケージ内に保存していました。アップグレードの注意点を参照してください |
起動時のその他の問題は、初回起動で説明しています。そもそも OAR をインストールするには、インストールを参照してください。