2013-09-02 41 views
13

My celerybeat.confGiám sát celerybeat với người giám sát và 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 

Khi tôi bắt đầu giám sát tôi nhận được một lỗi:

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

Bất kỳ ý tưởng làm thế nào để giải quyết này?

Trả lời

0

tôi giải quyết vấn đề của tôi bằng cách thiết lập user = root, nhưng tôi nghĩ rằng đây là cách xấu ...

+4

Đừng làm vậy! Sử dụng root càng ít càng tốt. Tốt hơn hãy làm theo câu trả lời của @ sanchitarora và viết tệp pid trong một thư mục mà bạn có quyền ghi vào. '--pidfile =/tmp/celerybeat-myapp.pid' – j7nn7k

1

Dưới đây là của tôi (làm việc) phiên bản dành cho Celere đánh bại:

[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" 

Có thể điều này giúp .

Đồng thời kiểm tra quyền trên thư mục nơi bạn tạo tệp pid.

+0

Không nên bắt đầu đánh vào bên trong công nhân cần tây để sản xuất http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html – RunLoop

+0

nhận xét này đề cập đến một số phiên bản thứ hai của Celery. Vào thời điểm đó đó là một cách tiêu chuẩn để làm điều này. Bạn không chắc chắn điều này đang diễn ra như thế nào. –

14

Sự cố là bạn chưa chỉ định bất kỳ thư mục nào trong tệp cấu hình và thư mục mặc định sau đó là '/' (root) mà người dùng của bạn không có quyền ghi.

Đặt người dùng là người chủ đã giải quyết vấn đề của bạn vì giờ đây bạn đã được phép ghi vào '/' tuy nhiên đó có thể không phải là giải pháp tốt nhất. Có nhiều cách bạn có thể giải quyết vấn đề này bằng cách bao gồm:

  1. Thêm biến thư mục vào cấu hình và cung cấp đường dẫn mà người dùng của bạn có quyền ghi vào.

    directory=<path> 
    
  2. Cung cấp tham số pidfile cho lệnh cần tây mà bạn đang sử dụng để bắt đầu cần tây. Đảm bảo rằng bạn có quyền ghi vào đường dẫn bạn chỉ định cho tệp pidfile.

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

Hoạt động tốt sau khi tùy chỉnh thêm "--pidfile" vào thư mục tmp. – Joni