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

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

B美

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

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

C菜
(だってシステムの根幹部分の変更ですから~)

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子
(【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サーバが起動してるってことだね
(完璧じゃん)


B美
systemctl status websocket-server.service[Enter] |
この場合、プロンプト状態に復帰するには、キーボードの「q」キーを押してね
もしくは
systemctl status websocket-server.service --no-pager[Enter] |
でも良いけど…
(こっちは勝手に復帰するわ)



A子

B美
多分「quit」の頭文字だと思うけどね

C菜
別に問題ないですけど~

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

B美
「start」「stop」「status」なんかを「systemctl」コマンドで実行する場合、末尾の「.service」は省略できるからね
(というか、普通は省略する…面倒くさいから(笑))
systemctl start websocket-server[Enter]
systemctl stop websocket-server[Enter] systemctl status websocket-server --no-pager[Enter] |
…って感じね

A子