1

PHPプロジェクトがあり、Pythonを使用して本番サーバーにデプロイしています。

展開の計画は次のとおりです。

  1. 新しいphp.iniファイルを検索します(パスが定義されています)

  2. 現在のファイルをこのファイルに置き換えます

  3. を介してPHP-FPMプロセスを再起動しますos.system('service php-fastcgi restart')。ここで、php-fastcgiはプロセスの実際の名前です。

Pythonはスクリプトの実行中にエラーを表示しませんが、PHPはデフォルト構成で再起動します。手動で(Linuxターミナルで)再起動しようとすると、完全に機能し、新しいphp.ini構成が正常に読み込まれます。私のPythonスクリプトのこの奇妙な振る舞いについて説明していただけますか?

アップデート

これがPythonスクリプトの一部です。

    php_ini_path_replace = '/etc/php5/cgi/php.ini'
    php_ini_path_source = os.path.join(destination, 'production', 'config', 'main-php.ini')

    try:        # Read source file
        source_conf_file = open(php_ini_path_source, 'r')
        php_ini_lines = source_conf_file.readlines()
    except IOError:
        print('Something is wrong with source file')

    try:
        actual_conf_file = open(php_ini_path_replace, 'w')
        actual_conf_file.writelines( php_ini_lines )
        print('PHP CGI configuration was succesfully changed.\nDon\'t forget to restart the PHP')
    except IOError:
        print('Something is wrong with actual file. May be it\'s in use')

os.system('service php-fastcgi restart')
4

3 に答える 3

1

copyfileファイルを手動で開いたり閉じたりする代わりに使用します。

import shutil

php_ini_path_replace = '/etc/php5/cgi/php.ini'
php_ini_path_source = os.path.join(destination, 'production', 'config', 'main-php.ini')

try:
    shutil.copyfile(php_ini_path_source, php_ini_path_replace)
except (Error,IOError):
    print('Error copying the file')

os.system('service php-fastcgi restart')
于 2012-12-31T09:11:23.297 に答える
1

によって書き込まれたデータwritelines()は、ファイルがフラッシュされるまで (C のように) インプロセス キャッシュに残る場合があります。直後に開始された他のプロセスでは、空のファイルまたは部分的なファイルが表示される場合があります。追加する必要があるのはsource_conf_file.close()、書き終わったときです。(Python プロセスが終了すると、ファイルがフラッシュされ、後で見ようとすると正しく表示されるため、これは厄介な問題です )

于 2012-12-31T09:02:42.163 に答える
0

シェル コマンドからのリターン コードまたは文字列を貼り付けたほうがよいと思います。根本的な原因を見つけるのに役立ちます。

一部のアドバイス:

ファイル ハンドラを閉じることを忘れないでください。使用できますwith。お気に入り:

try:
    with open(php_ini_path_source, 'r') as source_conf_file:
        php_ini_lines = source_conf_file.readlines()
except IOError:
    print('Something is wrong with source file')
于 2012-12-31T09:17:10.837 に答える