অন্য একটি প্রশ্নে, পিতামাতারা যখন প্রস্থান করেন তখন শিশুটিকে হত্যা করুন , আমি এই প্রতিক্রিয়াটিকে বাছাই করতে সহায়তা পেয়েছি এমন প্রতিক্রিয়া পেয়েছি।
এইভাবে, আমরা অ্যাপ্লিকেশনটি কনফিগার করি যাতে এটি কোনও ফাইলে লগ হয় এবং ক্রমাগত 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
আমরা ফাইলের নামগুলি ব্যবহার করে এবং এটি পরে প্রদর্শিত হলেও এটি সেগুলি পড়বে!
পরিশেষে, সর্বনিম্ন ডকফেরাইল:
FROM ubuntu
ADD run.sh /root/run.sh
CMD ['/root/run.sh']
দ্রষ্টব্য: কিছু অত্যন্ত আশ্চর্যজনক tail -f
আচরণ (যা "একটি দূরবর্তী ফাইলের সাথে প্রতিস্থাপন করা হয়েছে this এই নামটি ছেড়ে দেওয়া" বলে কাজ করার জন্য) আমি আরেকটি পদ্ধতির চেষ্টা করেছি: সমস্ত পরিচিত লগ ফাইলগুলি তৈরির সময় এবং কাটা কাটা হয়েছে: এইভাবে আমি নিশ্চিত করি যে সেগুলি বিদ্যমান আছে , এবং কেবল তখনই - তাদের লেজ দিন:
#! /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