Chạy .sh cứ sau 5 phút


12

Tôi có một tập lệnh .sh tải ảnh từ máy chủ của vệ tinh Nhật Bản và đặt nó làm ảnh nền. Tôi đã đưa nó vào danh sách khởi động, nhưng làm thế nào để tôi chạy nó tự động, cứ sau 5 phút, tự động?


1
Hãy dùng thử cronmaker.com, ở đó bạn có thể tạo biểu thức cron và đặt nó với crontab -e
Chúng tôi là Borg

2
Hình ảnh thậm chí thay đổi cứ sau 5 phút? Hãy thử sử dụng một khoảng thời gian tạo ra tải ít hơn không cần thiết trên máy chủ đích. Hoặc đảm bảo bạn chỉ tải xuống nếu tập tin thực sự thay đổi.
til_b

1
Nhân tiện, url của nền không gian là gì?
bohdan_trotsenko

Câu trả lời:


14

Tùy chọn lười biếng

Nếu bạn muốn một cách dễ dàng và tránh phải tìm ra biến môi trường nào cần đặt:

  • Hãy chắc chắn rằng tập lệnh của bạn bao gồm shebang
  • Làm cho nó thực thi
  • Thêm phần sau vào Ứng dụng khởi động:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"

    Dấu gạch ngang> Ứng dụng khởi động> Thêm. Thêm lệnh:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"

Giải trình

Nếu bạn chạy tập lệnh từ môi trường của riêng bạn (ví dụ từ cửa sổ đầu cuối hoặc từ Ứng dụng khởi động), một số biến môi trường sẽ được đặt. crontuy nhiên chạy tập lệnh của bạn với một tập hợp các biến môi trường hạn chế.
Vì kịch bản của bạn không nghi ngờ gì khi sử dụng gsettingslệnh:

gsettings get org.gnome.desktop.background picture-uri <wallpaper>

để đặt hình nền, gần như chắc chắn lệnh sẽ bị hỏng khi chạy từ cron.

Nhược điểm của "giải pháp lười biếng" hoàn toàn là lý thuyết. Một lệnh ngủ thực tế liên tục có nghĩa là không có gì cho hệ thống của bạn.

Thông tin bổ sung; cách khác

Đọc bài đăng này , và từ kinh nghiệm trong quá khứ, tôi khá chắc chắn rằng DBUS_SESSION_BUS_ADDRESSbiến môi trường cần phải được đặt.

Để làm như vậy, hãy thêm phần sau vào đầu tập lệnh của bạn (bên dưới shebang):

PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)

Sau đó, bạn sẽ có thể chạy nó thành công cron.

Tuy nhiên, bạn có thể rất tiết kiệm sự hối hả và chọn tùy chọn lười biếng.


@AleksanderMahnyov Chào mừng bạn. Vui mừng khi nó hoạt động :)
Jacob Vlijm 23/2/2016

2
Sử dụng một công việc định kỳ sẽ tốt hơn rất nhiều.
Luka Ramishvili

1
@LukaRamishvili Cảm ơn bạn đã bình luận. Tuy nhiên: a. Và tại sao vậy? một lệnh ngủ có nghĩa là không có gì cho hệ thống của bạn. b. Tôi thậm chí bao gồm các tùy chọn.
Jacob Vlijm

1
Mặt khác, nghiên cứu tốt về các biến phiên gnome, nó sẽ giúp OP rất nhiều, vì điều đó sẽ được yêu cầu theo một trong hai cách.
Luka Ramishvili

2
Tôi chỉ nhìn: cpu 0.0%Chúng ta đang nói về thuế gì?
Jacob Vlijm

24

Đặt nó trong của bạn crontab.

Mở cronbảng của bạn bằng cách:

crontab -e

Bây giờ thêm:

*/5 * * * * /path/to/script.sh

Đừng quên làm cho tập lệnh thực thi trước.


Vì tập lệnh của bạn phụ thuộc vào X, có lẽ sẽ là một ý tưởng tốt để thêm DISPLAYvào môi trường của tập lệnh:

*/5 * * * * DISPLAY=:0 /path/to/script.sh

Thay thế :0bằng thực tế của bạn DISPLAY(có thể được tìm thấy bởi echo $DISPLAYtừ phiên tương tác).

Nếu cần, bạn cũng có thể thêm XAUTHORITYbiến môi trường:

*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh

Một lần nữa bạn có thể tìm thấy giá trị bằng cách echo $XAUTHORITY.


1
Không chắc chắn nếu nó hoạt động với các biến môi trường hạn chế của cron, nhưng hãy xem OP có đề cập đến nó hoạt động không :)
Jacob Vlijm 23/2/2016

1
@AleksanderMahnyov Vui lòng chỉnh sửa câu hỏi của bạn để thêm tập lệnh, khó nói mà không xem nội DISPLAYXAUTHORITY
dung..có thể

1
@Kartagis Cron không thể xử lý giây, bạn cũng đang cố gắng thực hiện trong nhiều giờ mà vẫn không đúng về mặt cú pháp ..
heemayl 24/2/2016

2
Tôi thích phương pháp này hơn là "phương pháp lười biếng", vì tôi biết về cron, nhưng cần một chút khóa học bồi dưỡng. Đây chính xác là những gì tôi đã làm, cảm ơn rất nhiều! :)
ZaxLofful

2
Cách tiếp cận tốt hơn câu trả lời được chấp nhận. :)
Sandeep Kumar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.