Cronジョブを使用して、あるサーバーから別のサーバーにいくつかの値を更新しようとしています。私はfile_get_contents()を使用しています。
奇妙なことに、これは時々失敗します。 1分間機能し、もう1分間機能しません。次の2つのエラーが表示されます。
PHP警告:file_get_contents():php_network_getaddresses:getaddrinfo failed:名前またはサービスが不明
PHP警告:file_get_contents():ストリームを開けませんでした:php_network_getaddresses:getaddrinfoが失敗しました:名前またはサービスが不明です
そして:
PHP警告:file_get_contents():php_network_getaddresses:getaddrinfo failed:アドレスがホスト名に関連付けられていません
PHP警告:file_get_contents():ストリームを開けませんでした:php_network_getaddresses:getaddrinfoが失敗しました:ホスト名に関連付けられたアドレスがありません
この問題が発生するサーバーにログインしました。 pingまたはtracerouteの使用は問題なく機能するため、DNSの問題は除外しました。念のため、Google DNSネームサーバーも追加しました。まったく同じコードを使用する3番目のサーバーにはこの問題がないため、「応答」側ではなく、「呼び出し側」に問題があるように見えます。この場合、ホスト名をIPに置き換えることはできません。
誰かがこれを解決する方法を知っていますか?
私の場合、問題は、Apacheの起動時に/etc/resolv.conf
からDNSエントリを取得することでした。 Apacheを起動したときには、まだネットワークが設定されていませんでした。 (ネットワークの構成後に)Apacheを再起動すると、問題が解決しました。
私は私のブログ投稿でケースをより詳細に説明しました http://diogomelo.net/blog/16/Warning-file_get_contents-php_network_getaddresses-getaddrinfo-failed-No-address-associated-with-hostname
Cronジョブ内で実行していると、名前の検索が失敗することがあります。/etc/hostsにある名前でしか見たことがありませんが、DNS名をテストしていません。
電子メールの送信とSMTP接続のタイムアウトで表示されていました。
正確な原因はわかりませんが、私の場合、SMTPコードで127.0.0.1
の代わりにlocalhost
を使用すると、問題は解消しました。
これは、2番目のサーバーの接続制限が原因であり、cronジョブに短い時間間隔を設定したと思います。ご存知のように、サーバーは各IPからの連続接続を制御します。この問題を解決するには、より長い時間間隔を選択できます。