Menjalankan .sh setiap 5 menit

12

Saya memiliki skrip .sh yang mengunduh foto dari server satelit Jepang dan menetapkannya sebagai gambar latar belakang. Saya telah memasukkannya ke daftar startup, tetapi bagaimana saya menjalankannya setiap, seperti, 5 menit, secara otomatis?

Aleksander Mahnyov
sumber
1
Cobalah cronmaker.com, di sana Anda dapat membuat ekspresi cron dan menaruhnya dengan crontab -e
We are Borg
2
Apakah gambar bahkan berubah setiap 5 menit? Coba gunakan interval yang mengurangi beban yang tidak perlu pada server target. Atau pastikan Anda hanya mengunduh jika file benar-benar berubah.
til_b
1
Omong-omong, apa url untuk latar belakang ruang?
bohdan_trotsenko

Jawaban:

14

Opsi malas

Jika Anda menginginkan cara yang mudah, dan hindari mencari tahu variabel lingkungan mana yang harus diatur:

  • Pastikan skrip Anda menyertakan shebang
  • Jadikan itu dapat dieksekusi
  • Tambahkan yang berikut ke Aplikasi Startup:

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

    Dash> Aplikasi Startup> Tambah. Tambahkan perintah:

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

Penjelasan

Jika Anda menjalankan skrip dari lingkungan Anda sendiri (misalnya dari jendela terminal atau dari Aplikasi Startup), sejumlah variabel lingkungan akan ditetapkan. cronnamun menjalankan skrip Anda dengan variabel lingkungan terbatas.
Karena skrip Anda tidak diragukan lagi menggunakan gsettingsperintah:

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

untuk mengatur wallpaper, hampir pasti perintah akan pecah saat dijalankan cron.

Kelemahan dari "solusi malas" adalah murni teoretis. Perintah yang tidur praktis terus-menerus tidak ada artinya bagi sistem Anda.

Informasi tambahan; kalau tidak

Membaca posting ini , dan dari pengalaman di masa lalu, saya cukup yakin DBUS_SESSION_BUS_ADDRESSvariabel lingkungan perlu diatur.

Untuk melakukannya, tambahkan bagian berikut di awal skrip Anda (di bawah shebang):

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

Maka Anda harus dapat menjalankannya dengan sukses cron.

Namun Anda dapat menyimpan keramaian dengan sangat baik, dan memilih opsi malas.

Yakub Vlijm
sumber
@AlexanderMahnyov Terima kasih. Senang bekerja :)
Jacob Vlijm
2
Jauh lebih baik menggunakan pekerjaan cron.
Luka Ramishvili
1
@LukaRamishvili Terima kasih atas komentarnya. Namun demikian: a. Dan mengapa begitu? perintah tidur tidak ada artinya bagi sistem Anda. b. Saya bahkan memasukkan opsi.
Jacob Vlijm
1
Kalau tidak, penelitian yang bagus tentang variabel sesi gnome, itu akan banyak membantu OP, karena itu akan diperlukan.
Luka Ramishvili
2
Saya hanya melihat: cpu 0.0%Pajak apa yang sedang kita bicarakan?
Jacob Vlijm
24

Masukkan ke dalam crontab.

Buka cronmeja Anda dengan:

crontab -e

Sekarang tambahkan:

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

Jangan lupa untuk membuat skrip dapat dieksekusi sebelumnya.


Karena skrip Anda bergantung pada X, mungkin ide yang baik untuk menambahkannya DISPLAYke lingkungan skrip:

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

Ganti :0dengan aktual Anda DISPLAY(dapat ditemukan oleh echo $DISPLAYdari sesi interaktif).

Jika perlu, Anda juga dapat menambahkan XAUTHORITYvariabel lingkungan:

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

Sekali lagi Anda dapat menemukan nilainya dengan echo $XAUTHORITY.

heemayl
sumber
1
Tidak yakin apakah itu berfungsi dengan variabel lingkungan terbatas dari cron, tetapi mari kita lihat apakah OP menyebutkannya bekerja :)
Jacob Vlijm
1
@AleksanderMahnyov Harap edit pertanyaan Anda untuk menambahkan skrip, sulit dikatakan tanpa melihat DISPLAYXAUTHORITY
isinya..mungkin
1
@Kartagis Cron tidak dapat menangani detik, juga Anda coba lakukan selama berjam-jam yang secara sintaksis masih salah ..
heemayl
2
Saya suka metode ini daripada "metode malas", karena saya tahu tentang cron, tetapi membutuhkan sedikit kursus penyegaran. Inilah yang saya lakukan, terima kasih banyak! :)
ZaxLofful
2
Pendekatan yang lebih baik daripada jawaban yang diterima. :)
Sandeep Kumar