एक अन्य प्रश्न में, किल चाइल्ड प्रोसेस जब माता-पिता से बाहर निकलता है , तो मुझे वह प्रतिक्रिया मिली जो इसे हल करने में मदद करती है।
इस तरह, हम एप्लिकेशन को कॉन्फ़िगर करते हैं इसलिए यह एक फ़ाइल में लॉग करता है, और tail -f
इसे लगातार । सौभाग्य से, tail
स्वीकार कर सकते हैं --pid PID
: यह निर्दिष्ट प्रक्रिया से बाहर निकलने पर बाहर निकल जाएगा। हमने $$
वहां रखा : वर्तमान शेल का पीआईडी।
अंतिम चरण के रूप में, लॉन्च किया गया एप्लिकेशन exec
'एड' है, जिसका अर्थ है कि वर्तमान शेल उस एप्लिकेशन के साथ पूरी तरह से बदल दिया गया है।
रनर स्क्रिप्ट, run.sh
इस तरह दिखेगा:
#! /usr/bin/env bash
set -eu
rm -rf /var/log/my-application.log
tail --pid $$ -F /var/log/my-application.log &
exec /path/to/my-application --logfile /var/log/my-application.log
ध्यान दें: tail -F
हम फ़ाइलनामों की सूची का उपयोग करके , और यह बाद में दिखाई देने पर भी उन्हें पढ़ेंगे!
अंत में, न्यूनतर Dockerfile:
FROM ubuntu
ADD run.sh /root/run.sh
CMD ['/root/run.sh']
नोट: कुछ बेहद अजीब tail -f
व्यवहार (जो कहते हैं कि "एक दूरस्थ फ़ाइल के साथ बदल दिया गया है) को काम करने के लिए" मैंने इस नाम को छोड़ दिया है ") मैंने एक और दृष्टिकोण की कोशिश की: सभी ज्ञात लॉग फाइलें बनाई जाती हैं और स्टार्ट अप पर छंटनी की जाती हैं: इस तरह से मुझे लगता है कि वे मौजूद हैं , और उसके बाद ही - उन्हें पूंछें:
#! /usr/bin/env bash
set -eu
LOGS=/var/log/myapp/
( umask 0 && truncate -s0 $LOGS/http.{access,error}.log )
tail --pid $$ -n0 -F $LOGS/* &
exec /usr/sbin/apache2 -DFOREGROUND