特定のコードベースを同期させる必要がある 2 つのリモート サーバーがあります。最初にすべて設定しましたが、2 番目に設定しているときに問題が発生しました。
hgそれらは同じ場所にインストールされていません。hg <command>エラーが返されるため、実行できません。
sh: hg: コマンドが見つかりません
そのため、フルパスを使用していましたが、2 つの別々のhg場所では機能しません。
応答からのパスを実行して使用するのが賢明だと思ったwhich hgので、新しいコードを次に示します。
$hg = trim(`which hg`, "\n");
$output = `{$hg} pull -u`
しかし、そうで$hgはNULLありません。2 番目のサーバーに SSH で接続すると、which hg確実に機能することがわかります。コマンドに2>> path/to/logエラーがあるかどうかを確認するために追加しましたが、ありませんでした。whichログに書き込んでいることを確認したので、それとは関係ありませんでした。
私はセーフ モードで実行していませんshell_exec。他のコマンドが機能するため、実行することは間違いなく許可されています。
シンボリックリンクを作成して、両方が同じパスを持ち、パスをハードコードするだけでよいことはわかっていますが、なぜ機能しshell_exec('which hg')ないのか頭がおかしくなりました!!!