لدي مجموعة CoreOS التي لدي فيها خدمة SystemD تقوم للتو بتشغيل حاوية Docker. ومع ذلك ، لغرض المرونة ، أريد أن يتم سحب الحاوية من Docker Registry ليتم اكتشافها عند بدء الخدمة ، ما أفعله بسهولة باستخدام Etcd (نظام اكتشاف العقدة من مشروع CoreOS).

لذلك ، جربته في محطة عادية ، ما يعطيني أمرًا كهذا /usr/bin/etcdctl get /services/registryللحصول على عنوان IP الحالي للتسجيل. ويعمل! ولكن من خدمة SystemD ، يتم إرجاع الأمر كما هو مكتوب ولا يتم تنفيذه كما يجب أن يفعل شخص ما في برنامج Shell النصي مع backticks. لقد جربت backticks ، $()و ${}syntaxes لكن الأمر لا يزال يُعاد كما هو.

إذا كان لدى أي شخص اقتراح ، فأنا آخذه :) شكرًا!

answer

إذا قمت باستخدام ExecStart الخاص بك /bin/sh -c "echo $(etcdctl ls /)"، فسوف يعمل بالطريقة التي تريدها.

إليك ملف وحدة كامل يستفيد من هذا: https://github.com/coreos/unit-examples/blob/master/simple-fleet/apache-discovery.2.service#L6