Tôi có một tập lệnh Python quản lý một loạt các nhiệm vụ CasperJS và xử lý kết quả. Nó chạy tốt từ dòng lệnh, nhưng khi tôi chạy kịch bản trong cron, tôi nhận được lỗi:Python Subprocess trả về trạng thái thoát khác không chỉ trong cron
CalledProcessError: Command '['/path/to/casperjs', '/path/to/doSomething.js', 'args']' returned non-zero exit status 1
Trong Python, tôi gọi CasperJS:
response = subprocess.check_output(['/path/to/casperjs', '/path/to/doSomething.js', 'args'], shell=True)
Tôi đã thử shell=False
và Popen
như tốt, nhưng tôi nhận được kết quả tương tự. Tôi cũng đã cố gắng làm cho toàn bộ lệnh một chuỗi (thay vì danh sách), nhưng điều đó cũng không giúp được gì.
Chạy '/path/to/casperjs /path/to/doSomething.js args'
trả lại mã thoát 0 khi chạy trong trình bao.
Tôi cũng đã thêm PATH=/usr/bin:/bin:/sbin:/usr/local/bin
vào crontab của mình không có kết quả. (Như được đề xuất trong this question.)
Bất kỳ ý tưởng nào tại sao tôi chỉ gặp lỗi này trong cron? Cảm ơn!!
EDIT: Phù hợp với câu trả lời dưới đây, thiết shell=False
và stderr=subprocess.STDOUT
mọi công việc làm ...
Tôi sẽ thêm vào lý do phổ biến nhất cho "lệnh này hoạt động khi tôi chạy thủ công nhưng không theo cron/giám sát/upstart/.. "là một biến môi trường - không phải luôn luôn PATH - là khác nhau hoặc bỏ lỡ g. – mattbornski
Có, tôi đã kiểm tra tất cả các biến môi trường, nhưng thiết lập 'shell = False' và thêm' stderr = subprocess.STDOUT' và bây giờ mọi thứ đều hoạt động một cách kỳ diệu? !! – arboc7
@mattbornski: Ya tôi đồng ý. Của nó hoặc là, hoặc có thể là quá trình đang gặp rắc rối chạy dưới bất kỳ người dùng crontab được thiết lập như. Tôi không muốn suy đoán quá nhiều, nhưng thay vì cố gắng và tìm ra những lỗi thực sự có thể là – jdi