2013-09-02 8 views
13

मेरे celerybeat.confऔर पर्यवेक्षक के साथ celerybeat virtualenv

[program:celerybeat] 
command=/path/app/env/bin/celery beat -A project.tasks --loglevel=INFO 
environment=PYTHONPATH=/path/app/env/bin 

user=nobody 
numprocs=1 
stdout_logfile=/var/log/celeryd.log 
stderr_logfile=/var/log/celeryd.log 
autostart=true 
autorestart=true 
startsecs=10 
stopwaitsecs = 600 
killasgroup=true 
priority=998 

निगरानी जब मैं पर्यवेक्षक शुरू कर मैं एक त्रुटि प्राप्त:

pidfile_fd = os.open(self.path, PIDFILE_FLAGS, PIDFILE_MODE) 
celery.platforms.LockFailed: [Errno 13] Permission denied: '/celerybeat.pid' 

किसी भी विचार कैसे इस को हल करने के?

उत्तर

0

मैं उपयोगकर्ता = जड़ की स्थापना करके मेरी समस्या का समाधान है, लेकिन मुझे लगता है कि यह बुरा तरीका है ...

+4

कि ऐसा मत करो! रूट को जितना संभव हो उतना कम उपयोग करें। @ Sanchitarora के उत्तर का बेहतर अनुसरण करें और उस निर्देशिका में पिड फ़ाइल लिखें जिसे आपने लिखने के लिए उपयोग किया है। '--pidfile =/tmp/celerybeat-myapp.pid' – j7nn7k

1

यहाँ मेरी (कार्य) Celere के लिए संस्करण को हरा है:

[program:celery_periodic] 
command=<venv_path>/bin/python <path>/manage.py celery worker --loglevel=info -c 1 -E -B -Q celery_periodic -f <log_folder>/celery_periodic.log -n periodic_worker 
directory=<path> 
user=<some_user> 
group=<some_user> 
autostart=true 
autorestart=true 
redirect_stderr=True 
daemon = False 
debug = False 
stdout_logfile = NONE 
stderr_logfile = NONE 
loglevel = "info" 

हो सकता है इस में मदद करता है ।

फ़ोल्डर पर अनुमतियां भी जांचें जहां आप पिड फ़ाइल बनाते हैं।

+0

उत्पादन के लिए अजवाइन कार्यकर्ता के अंदर हरा शुरू करने की अनुशंसा नहीं की जाती है http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html – RunLoop

+0

यह टिप्पणी सेलेरी के कुछ दूसरे संस्करण को संदर्भित करती है। उस समय यह ऐसा करने का एक मानक तरीका था। यकीन नहीं है कि अब बात कैसे चल रही है। –

14

समस्या यह है कि आपने कॉन्फ़िगरेशन फ़ाइल में कोई निर्देशिका निर्दिष्ट नहीं की है और डिफ़ॉल्ट निर्देशिका तब '/' (रूट) है जिसे आपके उपयोगकर्ता को लिखने की अनुमति नहीं है।

उपयोगकर्ता को रूट के रूप में सेट करने से आपकी समस्या हल हो गई है क्योंकि अब आपको '/' को लिखने की अनुमति थी, हालांकि यह सबसे अच्छा समाधान नहीं हो सकता है।

  1. config में एक निर्देशिका चर जोड़ें और एक पथ अपने उपयोगकर्ता के लिए लिखने के लिए अनुमतियां हैं प्रदान करते हैं: वहाँ कई तरीके शामिल करके आप इस का समाधान कर सकते हैं।

    directory=<path> 
    
  2. अजवाइन आदेश है कि आप अजवाइन शुरू करने के लिए प्रयोग कर रहे हैं करने के लिए एक pidfile तर्क प्रदान करें। सुनिश्चित करें कि आपके पास pidfile के लिए निर्दिष्ट पथ पर लेखन अनुमतियां हैं।

    command=/path/app/env/bin/celery beat -A project.tasks --loglevel=INFO --pidfile=/tmp/celerybeat-myapp.pid 
    
+0

कस्टम जोड़ने के बाद ठीक काम करता है "--pidfile" tmp निर्देशिका में। – Joni

संबंधित मुद्दे