nohupとdisownにもかかわらず、ログアウト時にプロセスが終了するのはなぜですか?

nohupとdisownにもかかわらず、ログアウト時にプロセスが終了するのはなぜですか?

ログアウトした後も実行したい実行可能ファイル(Unityで作成したサーバー)があります。すべてのインターネットでは、nohupどちらか一方または両方を介してdisownこれを行うことができるはずです。しかし、これはうまくいきません。私は以下が欲しい:

nohup /usr/bin/myexecutable &
disown -h

この時点でプロセスのリストを確認してみると、私のプロセスが実行されているのです。その後、exitsshで再度ログインしてプロセスリストを再確認しましたが、消えました。フラグを使用または使用せずdisown、フラグを使用または使用せずに試しましたが、-hシェルを終了するときにプロセスが消えるのを防ぐことはありません。

screenorを使用してこれを行うことはできますが、tmux技術的な知識のない従業員がログインして実行できる簡単な起動スクリプトを設定しようとしています。どんなアイデアがありますか?

(私はUbuntu 16.04.6 LTSを実行しています。)

編集:誰かが提案しました。この問題しかし、@mathsyouthのコメントのようにdisown私には効果がありません。この質問に対する唯一の答えを書いた@Foxは、「使用中のプログラムがまだ終了し、シェルの終了時に拒否されれば、これは別の問題のようです」と述べました。 (上記のように、彼の使用提案はscreen私のユースケースには役に立ちませんでした。)

ベストアンサー1

tmuxやscreenはオプションではないので、systemdを使用することをお勧めします。たとえば、次のようにお気に入りのエディタ(nano、vimなど)を使用してファイル(sudoなど)を作成します。

sudo nano /etc/systemd/system/myexecuteable.service

少なくとも次の内容を含める必要があります。

[Unit]
Description=start my executable after multi-user target

[Service]
Type=simple
ExecStart=/path/to/my/executable

[Install]
WantedBy=multi-user.target

今、2つの可能性があります。

  1. 実行可能ファイルは、システムの起動時に開始する必要があります。その後、発行する必要がありますsudo systemctl enable myexecutable.service
  2. 手動で起動しようとしています。その後、発行sudo systemctl start myexecutable.service

最初のケースでは、「アクティブ化」は「開始」を意味しないため、追加の「systemctl start」コマンドを実行してテストする必要があるかもしれません。

セッションを終了してもサービスは実行されます。実行可能ファイルに出力がある場合(bashファイルで「ロガー」を使用)、いつでも次のものを使用できます。journalctl -u myexecutable.service

おすすめ記事