Node APIサービスを管理するカスタムアップスタートスクリプトがあります。そのスクリプトは出力を/var/log/upstart/api-access.log
にパイプします。私が見続けているのは、古いログがapi-access.log.1.gz
にアーカイブされることです。 、ただし、新しいapi-access.log
ファイルは作成されません。
なぜこれが起こっているのか、それを正しくするために私ができることは何ですか?
私のupstartファイルのスクリプト部分は次のようになります。
script
chdir /opt/www/api
exec Sudo -u www-data NODE_ENV=production npm start >> /var/log/upstart/api-access.log
end script
/var/log/upstart/api-access.logがアーカイブされると、元のファイルシステムへのリンクが削除されますが、iノードは実行されたプロセスによって保持されたままになります。プロセスは、参照がない場合でもこのiノードへの書き込みを続行し、プロセスが再起動されるまで書き込みを続行します。
その出力をそのファイルにリダイレクトする特別な理由がない限り、そうすることは避けてください。 Upstartは、とにかくupstartスクリプトにちなんで名付けられた/ var/log/upstart内のファイルにすべての出力を書き込みます。また、書き込みのたびにファイルを再度開くため、ログローテーションによってファイルが削除された場合はファイルが再作成されます。
JennyDによる編集:ファイルに書き込みたい場合は、ファイルを移動する代わりに、ログローテーションスクリプトをコピーして切り捨てるように設定します。そうすれば、元のファイルハンドルは引き続き使用できますが、内容はアーカイブファイルに移動されます。