Linux 起動時に tmux をバックグラウンドで起動しサーバーを走らせておく

Linux OS を起動したときに、systemd のサービスのように自動起動して、常駐するサーバーを走らせたかった。
適当にウェブ検索しただけだと出てこなかったので、備忘録としてやり方をまとめておく。

service.sh の作成

tmux のセッションを起動するコマンドを記した service.sh を作成する。

  • hoge :サーバーを起動するコマンド
  • /path/to/working-directory :実行ディレクトリへのパス
  • window-name:tmux のウィンドウの名前(タブみたいなやつ)
  • session-name:tmux のセッションの名前(左下に来るやつ)
/usr/bin/tmux new-session -d -c /path/to/working-directory -n window-name -s session-name 'hoge'

service.sh は適当な場所に、パーミッション 775 等で保存しておく。

systemd サービスファイルの作成

OS 起動時に service.sh を実行して、tmux をバックグラウンドで起動しサーバーを走らせるサービスファイルを作る。
以下の内容のファイルを、/etc/systemd/system/hoge.service におく( hoge の部分は適当な名前に )

  • Hoge:サービスの名前(適当につける)
  • /path/to/service.sh:先ほど作った service.sh へのパス
  • foo:実行ユーザーの名前
[Unit]
Description=Hoge
After=network.service

[Service]
Type=forking
# Restart=always
WorkingDirectory=/path/to/working-directory
ExecStart=/bin/bash /path/to/service.sh
User=foo
Group=foo

[Install]
WantedBy=multi-user.target

サービスの有効化

以下のコマンドで、サービスを有効化する

sudo systemctl daemon-reload
sudo systemctl enable hoge.service
sudo systemctl start hoge.service
sudo systemctl status hoge.service

ここまでやって、tmux ls を実行した際に、新たなセッションができていたら、ひとまず tmux の起動は成功。
tmux a -t session-name を実行して、サーバーが動作していれば成功。