0

他の同様の行が機能しているにもかかわらず、シェルコマンドの私の行の1つが実行されていません。Ubuntu12.04ベースのOSを使用しているLinuxマシンで実行しています。execも使用してみましたが、まだ機能しません。

私は実際にこれをある時点で機能させていましたが、ハングの問題(コマンド出力を待っている)に遭遇しました。そのため、出力を/ dev/nullにリダイレクトしています。そのため、開発のどこかで何かが変わった。インストールするDebianパッケージを作成し、そのインストールパッケージを実行したので、ファイルを上書きするときにアクセス許可が変更されたのではないかと思ったので、すべてのユーザー/グループ/所有者に読み取り/書き込み/実行を追加しましたが、それも機能しませんでした。

コードはここにあります:

if(isset($_POST['activateXML']))
{
    if (videoConsistencyCheck())
    {
        `cp {$fileXML} /apps/video/xml.xml`;
        `sudo /apps/video/vsss restart >/dev/null 2>&1 &`;
        systemUnvalidate();
        header('Location: index.php?app='.$_GET['app']);
        die();
    }
}

ifステートメントの最初の行が実行されることを知っています。コード行は実際の端末で正常に機能するため、それも問題ではありません。私はたくさんのグーグルをしました、そして、私が見つけることができたすべては答えられていない質問です、どんなアドバイスも役に立ちます。

編集:機能していないように見えたのは、実際には意図したとおりにコマンドを呼び出していましたが、bashスクリプトでは、start-stopデーモンを呼び出していましたが機能していませんでした

編集2:テストphpファイルを作成し、ターミナルからコードを実行し、コマンドにsudoを追加してstart-stop-daemonエラーを修正しましたが、それでもコードで機能しません。送信ボタンが押されたときにこのコードを呼び出しています。

4

2 に答える 2

0

追加のパラメーター、特に出力を使用します。exec($ command、$ output); var_dump($ output); コマンドで何が間違っている可能性があるかを判断します。うまくいかない場合は、execを使用するコードを教えてください。

于 2013-03-06T13:42:42.593 に答える
0

問題は、rootとしてのみ実行できるvsssスクリプトのバイナリファイルの呼び出しにありました。そのバイナリファイルへのアクセスを誰にも許可したくありませんでした。私たちが思いついた解決策は、vsssスクリプトでchmod + sを呼び出すことです。これにより、ユーザーIDとグループIDのアクセス許可は許可されますが、所有者のアクセス許可は保持されます。次に、NOPASSWDパラメーターを使用して、PHPユーザー(www-data)をsudoersファイルに追加しました。次に、PHPコードで次の行を使用しました。

exec('sudo /apps/video/vsss restart >/dev/null 2>&1 &')

shell_exec()/backticksはこのメソッドでは機能しません。

于 2013-03-06T19:21:00.477 に答える