LoginSignup
2
3

サーバーを止めるな!

Last updated at Posted at 2024-02-20

趣旨

僕は意図せず初めに最も難しい Systemd を使ってラズパイでbotを実装してたので、どの方法でも難しく感じなかったのですが、サーバーを止めない方法は僕の知る限り4つもありますし、僕も忘れがちなので備忘録を残しておきます。

以下 Systemd を使った例を載せておきます。

nohup コマンド

nohup コマンドは、別のコマンドをバックグラウンドで実行し、ハングアップシグナルを無視するためのPOSIXコマンドです。これにより、ユーザーがログアウトした後もプロセスが継続して実行されます。

daniel@ubuntu:~/telegram$ nohup python test.py &

このコマンドは、test.py をバックグラウンドで実行します。出力はデフォルトで nohup.out にリダイレクトされます。

停止する際には以下のコマンドで process ID を検知して、Killします。

ps aux | grep part_of_process_name_or_command | grep -v grep
kill PID

screen コマンド

screen は一つのターミナルウィンドウやリモートターミナルセッション内で複数の独立したターミナルセッションを使用できるターミナルマルチプレクサーです。ユーザーがログアウトした後もこれらのセッションを生存させ続けます。

新しいセッションを開始するには、単に screen と入力します。
スクリーンセッション内でスクリプトを通常通り実行します。
セッションからデタッチし、バックグラウンドで実行を続けるには、Ctrl-A その後 d を押します。
セッションに再接続するには、screen -r と入力します。

tmux コマンド

tmux は screen に似ていますが、より新しく、より複雑な機能セットを持っています。これもまた、セッションからデタッチして後で戻ることができます。

tmux を入力して新しい tmux セッションを開始します。
tmux セッション内でスクリプトを実行します。
セッションからデタッチするには、Ctrl-B その後 d を押します。
既存のセッションに再接続するには、tmux attach と入力します。

Systemd サービスを使用する

ルートアクセスがあり、スクリプトをサービスとして実行したい場合(ブート時またはオンデマンドで起動)、systemd サービスファイルを作成できます。

例えば、/etc/systemd/system/my_script.service にサービスファイルを作成し、以下のような内容を記載します。

[Unit]
Description=My Script Service

[Service]
User=daniel
WorkingDirectory=/home/daniel/telegram
ExecStart=/home/daniel/file/env/bin/python /home/daniel/file/test.py
Restart=always

[Install]
WantedBy=multi-user.target

サービスを有効にして開始します。

sudo systemctl enable my_script.service
sudo systemctl start my_script.service

この方法はより複雑ですが、システムの起動とシャットダウンプロセスとの統合により、より多くの制御を提供します。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3