web-dev-qa-db-ja.com

コマンドをバックグラウンドプロセス/サービスとして実行する

バックグラウンドで実行したいシェルコマンドがあります。これは、コマンドに&を付加することで実行できるため、バックグラウンドプロセスとして実行されますが、さらに必要です。機能性とそれについてどうするか疑問に思っていました:

  1. システムが再起動するたびに、コマンドをバックグラウンドで開始して実行したいのですが。
  2. service Apache2 startと同じように、必要に応じて開始および停止できるようにしたいと考えています。

これについてどうすればいいですか?コマンドをサービスとして実行できるツールはありますか?

これで少し迷ってしまいました。

ありがとう

12

daemon コマンドを見てください。これは、任意のプロセスをデーモンに変えることができます。これにより、多くの追加作業を行わなくても、スクリプトをデーモンとして機能させることができます。次のステップは、起動時にそれを自動的に呼び出すことです。それを行う正しい方法を知るには、OS(またはLinuxの場合はディストリビューション)を提供する必要があります。

21
Sorpigal

UNIXシステムは必要な数のプロセスを同時に処理できるため(GUIを使用している場合は、新しいシェルウィンドウを開くだけです)、プロセスをバックグラウンドで実行する必要があるのは、現在のシェルウィンドウを他の目的で使用する必要がある場合のみです。実行し続けるアプリケーションまたはプロセスを実行した後。

commandというコマンドをバックグラウンドモードで実行するには、次のコマンドを使用します。

command &

これは、プロセスが開始されるとコマンドプロンプトに戻る特殊文字です。他のことを行う他の特殊文字があります。詳細は here を参照してください。

24
MattMatt

この記事に基づく:
http://felixmilea.com/2014/12/running-bash-commands-background-properly/

...別の良い方法は、screenを使用することです。例:

screen -d -m -s "my session name" <command to run>

画面マニュアル から:

-d -m
デタッチモードで画面を開始します。これにより新しいセッションが作成されますが、アタッチされません。これは、システム起動スクリプトに役立ちます。

つまり、ターミナルを閉じることができます(&とは異なり)プロセスは実行を継続します

screenを使用すると、後でセッションに再接続することもできます

3
Anentropic

Bashを使用した高度なジョブ制御の場合、jobsbgおよびfgコマンドを調べる必要があります。

ただし、バックグラウンドでコマンドを実行することにあまり興味がないようです。やりたいことは、起動時にコマンドを起動することです。これを行う方法は、使用しているUnixシステムによって異なりますが、rcファミリーのファイル(/etc/rc.local(Ubuntuなど)。これらには、initスクリプトの後に実行されるスクリプトが含まれています。

1
rahmu

出力を/ dev/nullに送信するときにNohupを使用します

Nohup command &>/dev/null &

0
philip mudenyo