Friction River Software

  • お問い合わせ

CakePHP5入門【補足④】WebSocketサーバの自動起動

A子

ねぇ、このシステムの中核である「WebSocketサーバ」だけどさー

Linuxサーバ自体を再起動させたときって、わざわざ手動で起動しなきゃいけないのよね?

B美

そうね

A子

でもWebサーバ(Apache2)やメールサーバ(exim4)って、自動的に起動してるじゃん?

WebSocketサーバについても、自動起動するようにできないの?
(いちいち「MATE端末」を開いて、起動コマンドを打ち込むのが面倒くさくって…)

B美

うーん、できるっちゃできるけど…

まぁ、やってみましょうか

C菜

まずは「MATE端末」を開いて、suでrootになるんですよね~?
(だってシステムの根幹部分の変更ですから~)

B美

その通り

su -[Enter]
cd /etc/systemd/system[Enter]
nano websocket-server.service[Enter]

作成するファイル(websocket-server.service)の内容は以下の通りよ
(ファイル名については何でも構わないけど、末尾には必ず「.service」を付けてね)

[Unit]
Description=WebSocket Server(説明文)
After=network.target(起動順…networkのあと)

[Service]
Type=simple(基本的にはこれでOK)
ExecStart=/home/bimi/html/authapp/bin/cake web_socket_server(起動コマンド)
Restart=always(プロセス終了時に常に再起動を試みる ← 明示的に「stop」した場合を除く)

[Install]
WantedBy=multi-user.target(ランレベル3)
赤字の箇所はコメントなので打ち込まないように!

[Ctrl]+[o]→[Enter]→[Ctrl]+[x]で、上書き保存してから終了してね


A子

ふむ、なるほど
「bin/cake」コマンドをフルパスで記述しないといけないわけか…

んで、これで終わり?

B美

いいえ、まだよ
とりあえずは、うまく動くかどうかを検証しましょう

systemctl daemon-reload[Enter]
systemctl start websocket-server.service[Enter]
systemctl is-active websocket-server.service[Enter]

これで「active」って表示されればOKよ

ちなみに、「daemon-reloadデーモンリロード」することで、作成したユニットファイル(websocket-server.service)が有効になるからね
(言い換えれば、このコマンドは必須ってこと)

C菜

これは問題なく動いているということでしょうか~?

B美

そういうこと
もしも心配だったら、50080番ポートを使用しているプロセスが動いているか、コマンドを叩いて検証すれば一目瞭然よ

lsof -i :50080[Enter]

A子

このサービスを停止させたい場合、前に作った「websocket_close.sh」というシェルスクリプトを使うの?
(【CakePHP5実用編⑤】を参照)

B美

ううん、違うわ

systemctl stop websocket-server.service[Enter]

…って打ち込むだけ
(このサービスって、現在systemdの管理下なので「systemctl」コマンドで制御するの)

C菜

あ~
50080番ポートを使用するプロセスが消えたということは、WebSocketサーバが停止したということですね~

これで設定作業は完了ですか~?

B美

まだ肝心の「自動起動」を設定していないわ

systemctl enable websocket-server.service[Enter]

上記のコマンドを実行すれば完了よ

あ、もしも「自動起動」を無効にしたければ以下のコマンドを打ち込んでね

systemctl disable websocket-server.service[Enter]

A子

「WebSocketサーバ」が自動起動するかどうか、サーバ(開発環境のPC)を再起動して検証してみよう

・・・

おっ、チャットサービスがちゃんと動いてる!
…ってことは、WebSocketサーバが起動してるってことだね
(完璧じゃん)

B美

一応「systemctl」コマンドでもサービスの起動状態を確認できるわよ

systemctl status websocket-server.service[Enter]

この場合、プロンプト状態に復帰するには、キーボードの「qキュー」キーを押してね

もしくは

systemctl status websocket-server.service --no-pager[Enter]

でも良いけど…
(こっちは勝手に復帰するわ)


A子

なんで「qキュー」なのよ?

B美

知らんがな(苦笑)

多分「quitクイット」の頭文字だと思うけどね

C菜

--no-pagerノーページャー」オプションを付けない場合、日本語メッセージが文字化けしますね~

別に問題ないですけど~

A子

あ、そう言えば…

キーボードの上矢印(↑)キーを使えば、過去の入力履歴が出るけどさぁ
最初の一回だけはコマンド入力が大変だよ(長くって…)

B美

あ、これは(Apache2など)他のサービスでも同じなんだけど…

startスタート」「stopストップ」「statusステータス」なんかを「systemctlシステムコントロール」コマンドで実行する場合、末尾の「.serviceドットサービス」は省略できるからね
(というか、普通は省略する…面倒くさいから(笑))

systemctl start websocket-server[Enter]
systemctl stop websocket-server[Enter]
systemctl status websocket-server --no-pager[Enter]

…って感じね

A子

それを早く言えや(怒)