আমি সার্ভারের উদাহরণগুলির জন্য আবিষ্কারের সাইডকিক পরিষেবাটির জন্য আমার কাছে মোটামুটি সহজ ইউনিট ফাইল রয়েছে যা আমি কোরিওএস এ চলেছি। ইউনিট ফাইলটি দেখতে এমন দেখাচ্ছে:
[Unit]
Description=Discovery for frontend server (instance %i)
BindsTo=frontend@%i.service
After=frontend@%i.service
[Service]
EnvironmentFile=/etc/environment
ExecStart=/usr/bin/bash -c ' \
while true; do \
export PORT=$(docker port frontend%i 80 | sed s/.*://); \
etcdctl set /services/frontend/%i "${COREOS_PRIVATE_IPV4}:$PORT" --ttl 60; \
sleep 45; \
done'
ExecStop=/usr/bin/etcdctl rm /services/frontend/%i
[X-Fleet]
MachineOf=frontend@%i.service
এটি সূক্ষ্মভাবে কাজ করে, তবে এই পর্যায়ে পৌঁছতে আমার বয়স কয়েক হয়েছে, কারণ যদি আমি etcdctl
লাইনটি এখানে পরিবর্তন করি :
etcdctl set /services/frontend/%i "${COREOS_PRIVATE_IPV4}:${PORT}" --ttl 60; \
তারপরে এটি কার্যকর হয় না - এটি 100.45.218.3:
কোনও পোর্ট ছাড়াই একটি মান সেট করে শেষ করে । চলার পথে আমি $PORT
ভেরিয়েবলের বিভিন্ন ব্যবহারের সাথে খেলতে অনেক সময় ব্যয় করেছি এবং কনফিগারেশনটি কেন কাজ করে তা আমার কোনও ধারণা নেই। এক পর্যায়ে আমার এটি স্ক্রিপ্টে ছিল:
echo hi $PORT; \
echo "hi $PORT"; \
echo hi ${PORT}; \
echo "hi ${PORT}"; \
এবং জার্নাল লগগুলি এর মতো পেয়েছে:
Aug 17 01:05:07 core-01 bash[53694]: hi 32769
Aug 17 01:05:07 core-01 bash[53694]: hi 32769
Aug 17 01:05:07 core-01 bash[53694]: hi
Aug 17 01:05:07 core-01 bash[53694]: hi
মূলত আমার প্রশ্ন: এখানে কি চলছে? আমি কীভাবে {}
বাশ স্ক্রিপ্টগুলিতে কাজ করতে বুঝতে পারি তার মুখে এটি উড়ে যায় । এবং কেন আমি COREOS_PRIVATE_IPV4
ভেরিয়েবলের উপর কার্লিগুলি ব্যবহার করতে পারি (যা থেকে রফতানি হয় /etc/environment
তবে এর জন্য নয়) PORT
?