2

これが私の目標です。すべてのソースコードを含むWindowsXPPCと開発データベースがあります。それを「pc.dev.XP」と呼びましょう。Linuxを実行する宛先コンピューターがあります。それを「pc.demo.Linux」と呼びましょう。これが私が「pc.dev.XP」で行ったことです(コンテキストを取得するためです):

  • すべてのcygwinのものをインストールしました
  • 有効なrsaキーを作成し、それをdestバックアップコンピューターに配置して、sshがパスワードを要求しないようにします。
  • rsyncはこのようにかなりうまく機能します

コマンドラインを介して「pc.dev.XP」でこれを実行しようとすると:

cd \cygwin\bin
ssh Fred@pc.demo.Linux "cd /var/www && ls -al"

これは、パスワードを要求しなくても完全に機能します。「pc.dev.XP」で実行したいことは次のとおりです。

  • 開発者を抽出するphpスクリプトを起動します。データベースをSQLファイルに
  • このファイルをzip形式で圧縮します
  • ftp経由で「pc.demo.Linux」に転送します
  • 「pc.demo.Linux」にログインし、「unzip then mysql -e"sourceunzipedfile」を実行します。

「pc.dev.XP」を手動で実行した場合:

putty -load "myconf" -l Fred -pw XXX -m script.file.that.unzip.and.integrates.sql

これは完全に機能します。同じ:

cd \cygwin\bin
ssh Fred@dest "cd /var/www && ls -al"

php( "pc.dev.XP"にインストールされているwamp)でexec()を実行しようとすると、それらのスクリプトがハングします。これは、ユーザーが「Fred」ではなく「SYSTEM」であり、puttyまたはsshがパスワードを要求しているためだと確信していますが、おそらく私は間違っています。

とにかく、私が説明した4つのタスクを自動化する方法を探していますが、exec()がハングするために行き詰まります。safe_exec_modeまたはsafe_exec_dirディレクティブには問題はありません。これらは開発マシンで無効になっているため、exec( "dir")のような基本的なものを試してみるとexec()はかなりうまく機能します。

私が何ができるか/チェックする/修正することができるか考えていますか?

4

3 に答える 3

1

これが必要かどうかはわかりませんが、通常、次のような構成を使用して、マシン間でデータベースを同期します。

php extractFromDb.php | ssh user@remote.com "mysql remoteDatabaseName"

これにより、PHPスクリプトがローカルで実行され、スクリプトが出力するSQLコマンドがSSH straigtを介してリモートmysqlプロセスにパイプされ、リモートデータベースで実行されます。

圧縮が必要な場合は、SSHの-Cスイッチを使用するか、次のように選択した圧縮プログラムの使用を統合することができます。

php extractFromDb.php | gzip -9 | ssh user@remote.com "gunzip | mysql remoteDatabaseName"
于 2009-10-30T14:24:58.507 に答える
0

http://myWebserver.com/crazyScript.phpにアクセスすると、Apacheで実行されているPHPからこれを実行したいのですが、これはすべて発生しますか?または、PHPでスクリプトを記述し、cmd行を介してスクリプトを呼び出したいだけですか?

最初の解決策が必要な場合は、これらすべてのタスクを実行するための資格情報を持つ別のユーザーの下でapache/issを実行してみてください。

「開発用PCで手動で実行すると、これは完全に機能します。」そんな風にしないのはどうですか?そのスクリプトを実行するときは、開発マシンのローカルSSHサーバーに接続していると想定しています。これを行うときは、クレデンシャルFredを使用しているため、すべてが機能します。PHPスクリプトを実行すると、おそらくSYSTEMとして実行されていることがわかります。

apacheを実行しているユーザーを変更するか、phpを使用してローカルsshに接続し、それによって代替の資格情報を使用してみてください。

于 2009-10-30T13:16:42.763 に答える
0

これが私がしたことです:バッチファイル:

  1. 「php.exemy_extract_then_compress_then_ftp.php」を介してphpファイルを呼び出します
  2. rsyncを呼び出してソースフォルダーを同期します
  3. putty -l user -pw password-mfile_with_ssh_commands_to_executeを呼び出します

それは魅力のように機能します。

于 2009-11-04T15:56:31.553 に答える