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?
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?
Câu trả lời:
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:
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"
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. cron
tuy 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 gsettings
lệ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.
Đọ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_ADDRESS
biế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.
cpu 0.0%
Chúng ta đang nói về thuế gì?
Đặt nó trong của bạn crontab
.
Mở cron
bả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 DISPLAY
vào môi trường của tập lệnh:
*/5 * * * * DISPLAY=:0 /path/to/script.sh
Thay thế :0
bằng thực tế của bạn DISPLAY
(có thể được tìm thấy bởi echo $DISPLAY
từ phiên tương tác).
Nếu cần, bạn cũng có thể thêm XAUTHORITY
biế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
.
DISPLAY
XAUTHORITY