プログラムボブライトバックグラウンドで実行されません。実行間に大きな違いはありません
sudo boblightd
そして
sudo boblightd&
コンソールが追加の入力をブロックしない問題を解決するには?
pi@raspberrypi ~/boblight/boblightd-for-raspberry-master $ sudo boblightd
Boblightd 2.0 (optimized version for raspberry) (c) 2013 Speedy1985 and Heven)
(InitLog) start of log /root/.boblight/boblightd.log
(PrintFlags) starting boblightd
(CConfig::LoadConfigFromFile) opening /etc/boblight.conf
(CConfig::CheckConfig) checking config lines
(CConfig::CheckConfig) config lines valid
(CConfig::BuildConfig) building config
(CConfig::BuildConfig) built config successfully
(main) starting devices
(CClientsHandler::Process) opening listening TcpSocket on *:19333
(CDevice::Process) ambilight: starting with output "/dev/spidev0.0"
(CDevice::Process) ambilight: setting up
(CDevice::Process) ambilight: setup succeeded
pi@raspberrypi ~/boblight/boblightd-for-raspberry-master $ sudo boblightd&
[1] 2289
pi@raspberrypi ~/boblight/boblightd-for-raspberry-master $
Boblightd 2.0 (optimized version for raspberry) (c) 2013 Speedy1985 and Heven)
(InitLog) start of log /root/.boblight/boblightd.log
(PrintFlags) starting boblightd
(CConfig::LoadConfigFromFile) opening /etc/boblight.conf
(CConfig::CheckConfig) checking config lines
(CConfig::CheckConfig) config lines valid
(CConfig::BuildConfig) building config
(CConfig::BuildConfig) built config successfully
(main) starting devices
(CClientsHandler::Process) opening listening TcpSocket on *:19333
(CDevice::Process) ambilight: starting with output "/dev/spidev0.0"
(CDevice::Process) ambilight: setting up
(CDevice::Process) ambilight: setup succeeded
答え1
バックグラウンドコマンドが機能[1] 2289
し、実際にバックグラウンドに配置されていることを確認した後。
ただし、コマンドの出力は、リダイレクトしない限り、端末に送信されます。これを行う包括的な方法は次のとおりです。
sudo boblightd >std.txt 2>err.txt &
stdoutとstderrの両方を同じファイルに移動するには、次の手順を実行します。
sudo boblightd >std.txt 2>&1 &
もちろん、1つまたは2つのストリームの出力に興味がない場合は、ファイル/dev/null
名の代わりに送信できます。
sudo boblightd >/dev/null 2>err.txt &
(この例では標準出力を破棄しますが、問題が発生した場合に備えてstderrを維持します。)
修正する
上記は、boblightdが何であるかについての無知に基づいています。他の回答でデーモンモードがあることがわかったので、この場合に使用する必要があります。
ところで、上記は、sudo
パスワードの入力を求められず、端末ウィンドウを閉じないことを前提としています。前者の場合は個人的にsudo bash
thenを使用しますが、もう1つのアプローチはアクセスをキャッシュするために無害なコマンドを実行するboblightd >std.txt 2>err.txt &
ことです。sudo ls
後者の場合、nohup
これは建物を出た後も機能し続けることを保証する魔法の命令です。sudo
実際のコマンドの後ろと前に来ます。たとえばsudo nohup boblightd >std.txt 2>err.txt &
。または、その後sudo bash
(ルートシェルをそのままにしてください)。nohup boblightd >std.txt 2>err.txt &
exit
答え2
次のようにnohupコマンドを使用できると思います。
nohup sudo boblightd &
これにより、コマンド出力が現在のディレクトリのnohup.outファイルに配置されます。
次のようにscreenコマンドを使用することもできます。まず、画面を作成します。
screen -S your-sreen-name
その後、コマンドを実行します。
sudo boblightd
画面を保存して端末に戻るには、次のように入力します。Ctrl+AD(何かを実行するプロンプトが表示され、セッションCtrl+Aを停止せずにセッションから切り離すには、「d」と入力します。)screen
D
画面の復元:
screen -d -r your-screen-name
答え3
stdoutとstderrを非表示にするには、デフォルト以外の場所にリダイレクトする必要があります。 @devnullのコメントは、これを行う方法を示しています。これが最初のステップです。
&
単にプログラム分離を使用すると、ログアウト時にプログラムが自動的に終了します。これはあなたが望むものではないかもしれません。nohup
これを防ぐには、次のコマンドを使用する必要があります。
nohup sudo boblightd > boblight.out 2> boblight.err < /dev/null &
パスワードを要求するsudo
こともできます。パスワードが得られず、すべての出力/入力がリダイレクトされるため、パスワードを要求することに気づくことはできません。とにかく、これを達成するためのさまざまなソリューションがあります。
sudo
コマンドを実行する前にsudo
パスワードが保存されます。これは速くて汚い方法です。- を削除し
&
てパスワードを入力しsudo
たら、を使用してプロセスをバックグラウンドで送信しますCTRL + Z。 - 特定のユーザーと実行可能ファイルのペアに対してパスワードを要求しないようにsudoを設定することもできます。これはセキュリティ上の脆弱性になる可能性がありますのでご注意ください。
答え4
すでにコメントに答えが出ていますから。実際の答えで説明を提供する方が良いと思います。
したがって、行く方法は次のとおりです。 sudo boblightd > /dev/null 2>&1 &
これには3つの重要な部分があります。最も重要なのは&
行の終わりにあります。これにより、シェルは制御を返す前にコマンドが完了するのを待たなくなります。また、キーボードから標準入力を取得します。ジョブをバックグラウンドにしておきます。
しかし、これはまだ出力をコンソールに返します。これを防ぐために、>
標準出力をリダイレクトするシンボル(/dev/null
この場合はリダイレクト)があります。
この時点でも、get to screenコマンドで出力を取得できます。これは標準エラーになります。最後に魔法があります2>&1
。これは標準エラーストリームの出力を標準出力にリダイレクトします。
2
1
標準ファイル記述子から。 -stdout、-stderrに0
なります。stdin
1
2
必要に応じて出力をファイルにリダイレクトできます。
バックグラウンドタスクと対話するように設計されたいくつかのコマンドがあります。jobs
そしてfg
。
screen
必要に応じて、コマンドなどの高度なソリューションを使用することもできます。