お手製サーバープログラムなどインストーラーを介さないものを Windows起動時に開始させましょう。
「Mattermostインストール(Windows)」で、Mattermostのサーバー環境を作ったのは良いのですが、格好良いインストーラーで組み込まれたものではないため、サーバー起動時に自動起動しません。
これを自動起動するようにします。
別に Mattermostに限った手順ではなく、他のものにも応用可能です。
手っ取り早いもので 2通りありますので、それぞれでやってみます。
環境は Windows Server 2022ですけど、他の Windowsでも同じです。
1.タスクスケジューラのサーバー起動時実行スケジュールを使う
タスクスケジューラというのは、特定の日時に自動で色々な作業をさせることができる機能で、無人運転するのが基本のサーバーではよく使っています。
タスクスケジュール設定に「サーバー起動時」が選択できますので、これを使えばよいわけです。
やってみましょう。
スタートメニューから、[Windows 管理ツール] → [Windows タスクスケジューラ] を選択します。
個々のタスクは左側の枠にあるフォルダ階層(木構造)で管理されています。
Windowsをインストールしたままだと Microsoftがデフォルトで設定しているタスクしかありません。
Microsoft作成のタスクとは別に管理した方が良いので、[タスク スケジューラライブラリ]フォルダの下に自前のフォルダを作ります。
[タスク スケジューラライブラリ]フォルダで右クリックして出てくるメニューから [新しいフォルダー] を選択します。
[test] というフォルダを作りました。
作成した [test]フォルダで右クリックして出てくるメニューから [タスクの作成] を選択します。
タスクの設定をします。
[全般]タグです。
[名前]: Mattermost
[セキュリティオプション]: [ユーザーがログオンしているかどうかにかかわらず実行する]を選択
[構成]: [Windows2022]を選択 (余り意味がないらしい)
かつ、[タスクの実行時に使うユーザーアカウント] が [Administrator]ユーザーになっているのでこれを変えます。
ユーザーまたはグループの変更を押します。
[選択するオブジェクト名を入力して下さい] に [SYSTEM]ユーザーを入力し、OKを押します。
結果としてパスワード変更後からタスク実行が失敗してしまうので、パスワード変更の運用に「タスクのパスワードも再設定する」作業を追加していました。
しかしタスクが多くなってくるととてもやっていられないので、パスワードを持たない OSビルトインの [SYSTEM]ユーザーを使ったりしますが、コイツは Administratorと同じ権限を持っている強いユーザーなのでセキュリティに問題が出るというデメリットがあります。
このサイトでは安易に [SYSTEM]ユーザーや [Administraotr]ユーザーでサーバープロダクトを実行していますが、本来ここの設計は慎重であるべきです。
こうなりました。
[トリガー]タグです。
実行スケジュールを決めます。
新規を押します。
[タスクの開始]: [スタートアップ時]
OKを押します。
こうなりました。
[操作]タグです。
実行するプログラムを決めます。
新規を押します。
[操作]: [プログラムの開始]
[プログラム/スクリプト]: [C:¥work¥mattermost¥bin¥mattermost.exe]
[引数の追加]: [server]
OKを押します。
結果として実行するコマンド行がこういう風になりました。
OKを押します。
真ん中の上の枠に今作ったタスクが表示されています。
タスクの設定はこれで完了です。
この後、Windows Serverを再起動して、Mattermostが動き出したことを確認できました。
タスクのデメリットとしては「実行するだけ」の機能に過ぎないということです。
例えば Mattermostは PostgreSQLが動いていることが前提になっているんですが、その関係なんかはタスクでは考慮されていません。
タスクでも事足りはしますが、次の方法が好まれる理由です。
2.scコマンドでサービスとして登録する
商用のサーバープログラムやインストーラ付きのサーバープロダクトの場合は、まずこちらが使われています。
但し、実行プログラム自体をサービスとして動くように作らないといけないはずなので、Mattermostを例にしていますけど、上手く動くかどうかは不明です。
設定の仕方は参考になると思いますので、失敗するような気がしますがやってみます。
スタートメニューから [Windows 管理ツール] → [サービス] を選択します。
この画面に登録されている「サービス」は、サービスの起動・停止・再起動の管理、他サービスへの依存関係閲覧などができます。
ここに登録をするには黒い画面で scコマンドというのを使います。
黒い画面を立ち上げましょう。
スタートメニューから [Windows システムツール] → [コマンド プロンプト] を選択します。
[sc create]コマンドで、[Mattermost]という名前のサービスを登録します。
PostgreSQLへの依存も設定しています。
C:\Users\Administrator> sc create Mattermost binPath= "C:\work\mattermost\bin\mattermost.exe server" DisplayName= "Mattermost" Depend= "postgresql-x64-15"
[SC] CreateService SUCCESS
サービス登録できました。
メニューから [操作] → [最新の情報に更新] を選択します。
そうすると上で作った [Mattermost]サービスの行がでてきますので、右クリックして出てくるメニューから [プロパティ]を選択します。
[全般]タグです。
[スタートアップの種類]: [自動]
[ログオン]タグです。
何も変えてません。
このままにすると実行ユーザー列が [Local System]になりますんで、[SYSTEM]で動くのでしょう。
[回復]タグです。
何も変えてません。
[依存関係]タグです。
PostgreSQLのサービスへの依存が表示されています。
OKを押します。
Mattermostをサービスとして実行できるか試してみます。
[Mattermost]サービスの行で右クリックして出てくるメニューから、[開始] を選択します。
待ちます。
アウトでした。
Mattermostは Windowsサービスには対応してないのかなぁ…。
残念です。
まぁサービス登録されるソフトはほぼインストーラがありますからね。
というわけで、Windows起動時にサーバープログラムを実行する方法でした。
何かの足しになれば幸いです。