2010-04-26 19 views
5

Tôi có một tập lệnh python đặt chính xác hình nền máy tính để bàn thông qua gconf thành một hình ảnh ngẫu nhiên trong một thư mục nhất định.Người dùng Crontab + Python + Hình nền ngẫu nhiên = Không hoạt động?

Sau đó tôi đã mục sau đây trong crontab của tôi

* * * * * python /home/bolster/bin/change-background.py

Và syslog báo cáo một cách chính xác thực hiện

Apr 26 14:11:01 bolster-desktop CRON[9751]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:12:01 bolster-desktop CRON[9836]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:13:01 bolster-desktop CRON[9860]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:14:01 bolster-desktop CRON[9905]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:15:01 bolster-desktop CRON[9948]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:16:01 bolster-desktop CRON[9983]: (bolster) CMD (python /home/bolster/bin/change-background.py) 

Nhưng không changey desktopy, Bất cứ ý tưởng?

+0

Bạn có thấy thay đổi giá trị trong trình chỉnh sửa gconf không? Hình nền có thay đổi không nếu bạn đặt giá trị từ gconf-editor? – Thomas

+0

có và có, như tôi đã nói, kịch bản hoạt động bên ngoài cron gọi là chỉ ~/bin/change-background.py và python ~/bin/change-background.py – Bolster

Trả lời

6

Tập lệnh của bạn phụ thuộc vào biến môi trường DISPLAY, được đặt khi bạn thực thi tập lệnh từ trình bao trong phiên X, nhưng không được đặt khi tập lệnh được chạy từ cron.

+2

Vui lòng nêu câu trả lời của bạn dưới dạng câu trả lời:) – Bolster

+4

@Andrew Tôi mặc dù tôi đã làm. Câu hỏi của bạn là "Bất kỳ ý tưởng nào?", Tôi đã cho bạn lý do có thể xảy ra nhất do thông tin giới hạn mà bạn đã trình bày. Tôi đã đoán chính xác rằng vấn đề không phải với cron hoặc gconf, nó là với một biến môi trường cụ thể. Thấy rằng bạn có vẻ thông thạo với * NIX và Python, tôi không cảm thấy cần phải dạy bạn cách đặt biến môi trường (đối với bản ghi, đó là 'os.environ [" DISPLAY "] = ...' trong Python). – Bolo

2

Theo quan sát của Bolo, tôi quên việc xây dựng trong DISPLAY thành tập lệnh hoặc crontab.

giải pháp dễ nhất là để thêm vào trước crontab với env DISPLAY=:0.0

vậy:

* * * * * env DISPLAY=:0.0 python /home/bolster/bin/change-background.py 
+1

Sau đó chấp nhận câu trả lời của mình? – manifest

+0

Tôi sẽ, trong 44 giờ :) – Bolster

+0

Errr, trừ khi một số nhận xét đã bị xóa: * * của mình, không * này *, vì vậy không cần phải đợi 44 giờ? (Nhưng tốt, đó là [một cuộc thảo luận về Meta] (http://meta.stackexchange.com/questions/47906/etiquette-for-dealing-with-hint-answers).) – Arjan

2

Để thiết lập các biến môi trường DISPLAY, tôi sẽ đặt nó trực tiếp trong crontab. Ngoài ra, tôi sẽ làm cho các tập lệnh thực thi và cung cấp cho nó một tiêu đề thích hợp (#!/usr/bin/env python) để nó có thể được thực hiện trực tiếp. Ngoài ra, bạn có thể dựa vào PWD được đặt thành HOME khi crontab chạy.

crontab của tôi sẽ trông như thế này:

DISPLAY=:0.0 
* * * * * bin/change-background.py 

Bạn cũng có thể thiết lập PATH (theo cách tương tự như DISPLAY) để các bin/ thậm chí không cần thiết.


Gotcha chính cho việc thiết lập môi trường trong crontab là giá trị là không biến nội suy. Ví dụ: điều này không cung cấp kết quả mong đợi:

PATH=$HOME/bin:$PATH 
+0

Tập lệnh có thể thực thi, có tiêu đề thích hợp và Đường dẫn được đặt chính xác (tôi có rất nhiều thứ trong ~/bin) nhưng tôi chỉ thích rõ ràng về những gì đang diễn ra, vì vậy có nội dung 'xuất DISPLAY: 0.0' trong crontab sẽ nhắc tôi lý do tại sao nó có trong thời gian 6 tháng: D Cảm ơn bạn đã quan tâm. – Bolster

Các vấn đề liên quan