Supervisor: تم رفض الإذن بالخطأ عند استخدام المشرف ctl

تم إنشاؤها على ٢٦ نوفمبر ٢٠١٢  ·  12تعليقات  ·  مصدر: Supervisor/supervisor

أنا أستخدم المشرف + flask + gunicorn + Virtalenv للتخلص من تطبيقي ، عندما أستخدم المشرف ، يظهر لي الخطأ:

خطأ:، [Errno 13] تم رفض الإذن: ملف: /usr/lib/python2.7/socket.py سطر: 224

هذا هو المشرف

[inet_http_server]
المنفذ = 127.0.0.1: 9001
اسم المستخدم = xxx
كلمة المرور = xxxx

[المشرف]
ملف السجل = / tmp / supervisord.log
logfile_maxbytes = 10 ميغا بايت
logfile_backups = 10
loglevel = المعلومات
pidfile = / tmp / supervisord.pid
المستخدم = wwwuser

[المشرف ctl]
serverurl = http://127.0.0.1 : 9001
اسم المستخدم = xxx
كلمة المرور = xxx

[البرنامج: xxxxxxxxx]
الأمر = gunicorn -w 4 -k gevent -p /tmp/site.pid -b 127.0.0.1:6000 إدارة: التطبيق
process_name =٪ (program_name) s
numprocs = 1
الدليل = / home / wwwuser / site
تشغيل تلقائي = صحيح
المستخدم = wwwuser
redirect_stderr = صحيح
stdout_logfile = / tmp / site-out.log
stdout_logfile_maxbytes = 1 ميغا بايت
stdout_logfile_backups = 10
stderr_logfile = / tmp / site-err.log
stderr_logfile_maxbytes = 1 ميغا بايت
stderr_logfile_backups = 10

supervisorctl

التعليق الأكثر فائدة

في مشرفك.conf يمكنك القيام بشيء من هذا القبيل

فقط اجعلها قابلة للكتابة للجميع

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0766                 ; socket file mode (default 0700)

التحكم في من يملك الملف بالفعل

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0760                 ; socket file mode (default 0700)
chown=myuser:group       ; socket file uid:gid owner

هذا الأخير لست متأكدًا لأنني لم أختبر ولا أفهم السلوك تمامًا هنا. أنا أيضًا لا أهتم لأنه لا يبدو آمنًا جدًا:

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0700                ; socket file mode (default 0700)
username=root              ; (default is no username (open server))
password=yourrootpassword               ; (default is no password (open server))

ال 12 كومينتر

+1

أواجه هذه المشكلة أيضًا في ubuntu 12.04 عند تثبيت المشرف 3.0a8-1.1 عبر مدير حزم النظام. أقوم بإنشاء برنامج بسيط كما في البرنامج التعليمي: http://supervisord.org/running.html#adding -a-program

أنا chown'ed /tmp/supervisor.sock مالك وحلت هذه المشكلة.

في مشرفك.conf يمكنك القيام بشيء من هذا القبيل

فقط اجعلها قابلة للكتابة للجميع

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0766                 ; socket file mode (default 0700)

التحكم في من يملك الملف بالفعل

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0760                 ; socket file mode (default 0700)
chown=myuser:group       ; socket file uid:gid owner

هذا الأخير لست متأكدًا لأنني لم أختبر ولا أفهم السلوك تمامًا هنا. أنا أيضًا لا أهتم لأنه لا يبدو آمنًا جدًا:

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0700                ; socket file mode (default 0700)
username=root              ; (default is no username (open server))
password=yourrootpassword               ; (default is no password (open server))

لم أواجه هذه المشكلة إلا إذا لم أسجل الدخول بحساب الجذر. لذا فإن مشرف sudo العادي سوف يحل المشكلة

هل من المفترض أن نستخدم supervisorctl مع sudo؟

قابله أيضا!

في حين أن العديد من قرائنا سوف يفلتون من تشغيل الأمر مرة أخرى مع sudo ، والنجاح ، هناك طريقة أفضل! ينبع خطأ الإذن من أذونات الوصول إلى ملف مقبس المشرف ، والذي يمتلكه الجذر بشكل افتراضي ، وغير قابل للكتابة من قبل المستخدمين الآخرين. يمكننا جعل المشرف chmod و chmod الملف إلى مستخدم أو مجموعة معينة عند بدء التشغيل ، ومنح المستخدم أو المجموعة إذنًا لإيقاف الخدمات التي قمنا بتكوينها وبدء تشغيلها دون الحاجة إلى sudo.

دعونا ننشئ مجموعة ونضيف أنفسنا إليها من خلال القيام بما يلي

مشرف المجموعة
usermod -a -G المشرف

بعد تسجيل الخروج / تسجيل الدخول (حتى تصبح عضوية المجموعة الجديدة سارية المفعول) ، قم بتحرير ملف تكوين المشرف (/etc/supervisor/supervisor.conf) لجعل قسم unix_http_server يبدو كما يلي

[unix_http_server]
ملف = / var / run / supervisor.sock ؛ (المسار إلى ملف المقبس)
chmod = 0770 ؛ وضع ملف المقبس (الافتراضي 0700)
chown = الجذر: المشرف

لاحظ أننا قمنا بتغيير الملف إلى 0770 (قابل للكتابة من قبل المالك والمجموعة) ، وختم الملف إلى الجذر: المشرف ، والذي سيسمح لأعضاء مجموعة المشرفين بإجراء مكالمات للمشرف ctl. يجب علينا إعادة تشغيل المشرف مرة أخيرة

تحميل المشرف ctl

أو

إعادة تشغيل مشرف خدمة sudo

المرجع:

https://bixly.com/blog/supervisord-or-how-i-learned-to-stop-worrying-and-um-use-supervisord/

^ يعمل بشكل رائع!

لا تنس إضافة اسم المستخدم الخاص بك إلى الأمر usermod ، مع ذلك.

usermod -a <your-username> -G supervisor

بالنسبة للأشخاص مثلي الذين يستخدمون Linux ، يمكنك الحصول على اسم المستخدم الحالي الخاص بك باستخدام whoami

^ يعمل بشكل رائع!

لا تنس إضافة اسم المستخدم الخاص بك إلى الأمر usermod ، مع ذلك.

usermod -a <your-username> -G supervisor

بالنسبة للأشخاص مثلي الذين يستخدمون Linux ، يمكنك الحصول على اسم المستخدم الحالي الخاص بك باستخدام whoami

ومن أجل AWS لينكس أمي
usermod -a -G supervisor ec2-user (أو اسم المستخدم الخاص بك)

بالنسبة إلى شخص ما زال يفشل في استخدام supervisorctl دون إذن الجذر ، يمكنك التحقق من إذن الدليل الذي يحتوي على ملف sock:
ls -ld /var/run/supervisor/
إذا لم تتمكن من الوصول إلى هذا الدليل ، فيجب عليك استخدام chown أو chmod النحو التالي:
chown user:group /var/run/supervisor/
أو
chmod 777 /var/run/supervisor/

بالنسبة لي ، فقد ساعدني في نقل المقبس من /var/run/supervisord/supervisord.sock إلى شيء مثل /tmp/supervisord.sock وتغيير الأذونات إلى 766 .

حتى بعد تغيير التكوين لتعديل أذونات الملف ، لا يزال المجلد /var/run/supervisord/ غير متاح للمستخدمين غير المتميزين.

[unix_http_server]
;file=/var/run/supervisord/supervisord.sock  ; default value
file=/tmp/supervisord.sock
chmod=0766
[supervisorctl]
;serverurl=unix:///var/run/supervisord/supervisord.sock  ; default value
serverurl=unix:///tmp/supervisord.sock
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات