web-dev-qa-db-ja.com

SudoとNohupを連携させる

Linuxの初心者はこちら。

2つのコマンドライン入力を受け取るPerlスクリプトがあります。バックグラウンドで実行しようとしましたが、これは私が得たものです:

[~user]$ Nohup Sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
[2] 19603
[~user]$ Nohup: appending output to `Nohup.out'

システムが「Nohup: `Nohup.out 'への出力の追加」を返した後、新しいプロンプトは表示されません。その後、他のコマンドを入力する限り、シェルはプロセスが停止したことを通知します。

[~user]$ Nohup Sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
[2] 19603
[~user]$ Nohup: appending output to `Nohup.out'
ls
ascii_loader_script.pl  format_wrds_trd.txt  Nohup.out  norm_wrds_trd.cfg
[2]+  Stopped                 Nohup Sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv

この投稿を見て、コマンドを実行する前に「Sudo date」を実行しようとしました。まだ同じことを得た。 http://www.Sudo.ws/pipermail/Sudo-users/2003-July/001648.html

36
Alex Chen

ここでの問題、imhoはNohupではなく、Sudoのバックグラウンド処理です。

プロセスをバックグラウンド(コマンドの最後に&)で配置していますが、おそらくSudoにはパスワード認証が必要であるため、プロセスが停止します。

次のいずれかを試してください。

1)コマンドの最後からアンパサンドを削除し、passordプロンプトに返信し、あとがきでそれをバックグラウンドにします(CTRL-Zを入力してプロセスを停止し、bgコマンドを発行してバックグラウンドに送信します)

2)myetcname ALL =(ALL)NOPASSWD:ALLという行を含めて、ユーザーのパスワードを要求しないように/ etc/sudoersを変更します

パスワード応答のほかに、アプリケーションが他の入力を待機している場合は、次のように入力をコマンドにパイプできます。$ cat response.txt | Sudo mycommand.php

hth

19
Bandiera

解決策は、Sudoの-bフラグを使用して、コマンドをバックグラウンドで実行することです。

$ Sudo -b ./ascii_loader_script.pl 20070502 ctm_20070502.csv

Nohupは、現在のターミナルセッションを閉じた後でもプログラムを続行したい場合にのみ使用してください。

46
dusktreader

最初にSudoを使用し、次にNohupを使用する必要があります。

Sudo Nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
4
QkiZ

エディターを開き、次の行を入力しました。

#!/bin/bash
Sudo echo Starting ...
Sudo -b MyProcess

(ここでMyProcessはスーパーユーザーとして実行したいものです。)

次に、ファイルをMyShellScript.shとして保存します。

次に、ファイル許可を変更して実行を許可します。次に、ターミナルで実行します。 「-b」オプションは、プロセスをバックグラウンドで個別に実行するようにSudoに指示するため、端末セッションが終了した後もプロセスは実行され続けます。

Linux-mintで働いていました。

1
DVOPS

まず、SudoNohupを切り替える必要があります。その後:

if Sudo echo Starting ...
then
    Sudo Nohup <yourProcess> &
fi

echo Starting ...は、あまり機能しないコマンドで置き換えることができます。 Sudoのダミーコマンドとしてのみ使用します。

これにより、if-conditionのSudoがパスワードチェックをトリガーします。正常であれば、Sudoセッションがログインされ、2番目の呼び出しが成功します。そうでなければ、ifは失敗し、実際のコマンドを実行しません。

これは動作するはずです

Sudo -b -u userName ./myScript > logFile

./myScriptがバックグラウンドで正常に実行された後、このlogFileを電子メールとして送信できることを理解したいだけです。

1
Utsav

エイリアスとして設定できます:

Sudo sh -c 'Nohup openvpn /etc/openvpn/client.ovpn 2>&1 > /dev/null &'
0
xiaoping378

あなたが試すことができます

Sudo su
am#nd then
Nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
instead of
Nohup Sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
0
ThomasDr

試してください:

xterm -e "Sudo -b Nohup php -S localhost:80 -t /media/malcolm/Workspace/sites &>/dev/null"

Xtermを閉じても、PHP Webサーバーは生きています。
Nohupの前にSudoを置かないでください。そうしないと、xtermを閉じた後にPHP Webサーバーが強制終了されます。

0
diyism