Mengapa meletakkan skrip di /etc/cron.hourly tidak berfungsi?

16

Saya memasukkan skrip yang dapat dieksekusi /etc/cron.hourly, tetapi skrip itu tidak berjalan setiap jam sebenarnya itu tidak pernah berjalan sama sekali.

Berikut ini skrip (Suara jam) yang saya buat:

#! / bin / bash
mplayer ~ / Music / sfx_msg-highlight.wv &> / dev / null &
spd-say -r -50 -p 50 -t male3 "Waktu sekarang adalah $ (tanggal +"% l% p ")"
beri tahu-kirim "Ini:" "$ (tanggal +"% l% p ") sekarang." -i ~ / Pictures / "first tee.png" -t 5000

Crontab saya adalah:

DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /home/naruto/Hour-sound.sh

Sementara perintah mplayerdan spd-saydijalankan dengan benar, notify-senditu tidak. Saya juga mencoba mengarahkan kesalahan ke file:

0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error

Tapi itu tidak menunjukkan hasil. Apa yang saya lakukan salah?

Blok hitam
sumber
hanya memastikan, apakah Anda membuat skrip dapat dieksekusi? dimiliki oleh root? apa yang terjadi ketika Anda menjalankan skrip dari terminal atau meletakkan skrip sederhana di sana? apakah /etc/crontabmemiliki run-partsgaris untuk menjalankan cronpekerjaan per jam dari direktori?
heemayl
Dapat dijalankan: ya, menjalankan skrip berjalan dengan baik tidak ada yang salah dari direktori /etc/cron.hourly, tidak tahu cara memeriksa ini? Apakah itu ada di Aplikasi Startup? @heemayl
Black Block
1
Apakah /etc/crontabfile memiliki garis 17 * * * * root cd / && run-parts --report /etc/cron.hourly?
heemayl
1
Tolong jangan memposting tangkapan layar teks . Terutama ketika teks itu ditampilkan di jendela terminal transparan dan termasuk warna-warna yang mengganggu.
terdon

Jawaban:

24

Seperti yang mungkin Anda lihat di komentar untuk pertanyaan Anda, cronjobs di /etc/cron.hourly(dan yang lainnya, direktori serupa) dijalankan oleh run-parts. run-partssedikit pilih-pilih tentang nama file. Secara default ia tidak menjalankan file yang nama filenya mengandung apa pun selain (semua dari ASCII)

  • huruf besar
  • huruf kecil
  • digit
  • garis bawah
  • strip ("tanda minus")

Jadi jika skrip Anda memiliki nama file misalnya "myscript.sh", itu hanya diabaikan, karena run-partstidak suka titik.

Henning Kockerbeck
sumber
1- Berikut ini adalah file saya: mediafire.com/view/rg8r85xb7qw26zs/cron.hourly_017.png 2- Apakah Anda mencoba skrip apa pun di /etc/cron.hourly dan bekerja dengan Anda?
Blok Hitam
2
Saya baru saja menguji skrip litte yang baru saja menulis "Halo" ke file di / tmp, dan itu bekerja tanpa masalah. Untuk berjaga-jaga, Anda sadar bahwa skrip di /etc/cron.hourlybelum tentu dieksekusi "pada jam"? Jika cronjob in Anda /etc/crontabmemiliki 17 pada posisi menit, skrip dieksekusi pada 00:17, 01:17 dan sebagainya. Dan lagi untuk berjaga-jaga, izin skrip memungkinkan root pengguna untuk menjalankannya?
Henning Kockerbeck
Yah, tetapi naskah saya itu tidak pernah berjalan kapan pun. dan tentang izinnya lihat di sini: mediafire.com/view/psnb4bflawdlyly/…
Black Block
Mungkin itu sebenarnya masalah izin. Saya tahu bahwa skrip pada umumnya /etc/cron.d/tidak boleh menulis atau menjalankan izin untuk "grup" atau "orang lain". "pemilik" perlu mengeksekusi izin, "grup" dan "yang lain" harus hanya memiliki izin baca. Mungkin itu berlaku /etc/cron.hourlyjuga, meskipun saya tidak mengujinya.
Henning Kockerbeck
Ok maka saya telah mengubah izin untuk file saya mediafire.com/view/s2lq63u7z54ohbo/... yang membuat grup yang merupakan grup root hanya baca dan yang lainnya, jadi apakah ini akan membuat masalah?
Blok Hitam
5

Satu masalah adalah Anda mencoba menjalankan aplikasi grafis ( notify-send) dari cron. Butuh sedikit penyesuaian. Anda perlu mengatur XAUTHORITYdan DISPLAYvariabel dalam crontab sehingga dapat terhubung ke sesi X Anda yang sedang berjalan dan Anda perlu mengatur XDG_RUNTIME_DIRagar dapat terhubung ke sesi pulseaudio Anda. Sayangnya, ini perlu diatur di crontab itu sendiri, jadi Anda tidak bisa menggunakannya /etc/cron.hourly. Alih-alih, jalankan crontab -edan tambahkan baris ini:

DISPLAY=":0.0"
XAUTHORITY="/home/YOURUSERNAME/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /path/to/script.sh 

Ubah nilai XDG_RUNTIME_DIRmenjadi apa pun yang dikembalikan saat Anda echodari terminal. Di sistem saya, ini adalah:

$ echo $XDG_RUNTIME_DIR
/run/user/1001

Mungkin akan sama pada Anda, tetapi periksa dulu. Sekarang, skrip Anda akan berjalan setiap jam dan akan berfungsi seperti yang diharapkan.

terdon
sumber
Itukah yang Anda maksud mediafire.com/view/ucjpvu8b41n3hue/… . ini tidak berhasil untuk saya.
Blok Hitam
Saya pikir jika masalahnya ada di notify-send lalu mengapa perintah lain tidak berjalan dengan baik (seperti mplayer)?
Blok Hitam
@ BlackBlock ada beberapa masalah. i) notify-sendmembutuhkan XAUTHORITYdan DISPLAYvariabel yang akan ditetapkan dan ii) mplayerperlu yang XDG_RUNTIME_DIRditetapkan. Apakah Anda mencoba saran saya? Itu harus memperbaiki kedua masalah. Anda mungkin juga memiliki masalah penamaan karena run-partsseperti yang dijelaskan dalam jawaban lainnya.
terdon
Lalu mengapa ini tidak berhasil untuk saya? aku akan marah! lihat gambar saya di komentar pertama pada jawaban Anda
Blok Hitam
@BlackBlock no! Anda sedang mengedit /etc/crontab, jangan lakukan itu. Anda ingin ini dijalankan sebagai pengguna Anda, bukan sebagai root dan file itu memiliki format yang berbeda pula. Lakukan saja apa yang saya katakan dalam jawaban saya, jalankan crontab -edan tambahkan baris di sana.
terdon
3

Script yang diakhiri dengan .shtidak dieksekusi di /etc/cron.hourlyfolder:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=308911
Tautan atau binari di dalam direktori yang ditangani oleh run-pars (seperti /etc/cron.daily) tidak akan berjalan jika suatu periode merupakan bagian dari nama mereka.

ganti nama skrip

mv /etc/cron.hourly/Hour-sound.sh /etc/cron.hourly/Hour-sound

atau masukkan skrip-panggilan ke

/etc/crontab

yang memungkinkan .shakhirnya

rubo77
sumber
1

Jangan gunakan skrip dengan ekstensi (abc.sh) dan tambahkan tempat kebutuhan Anda. (cron.hours).

tambahkan barang kode Anda ke file abc dan simpan. (untuk kebutuhan Anda) (ini harus perintah bash)

menggunakan

sudo chmod +x abc

perintah untuk membuat file yang dapat dieksekusi.

edit etc/cronrtab file

ada beberapa baris yang sudah ditentukan sebelumnya. Edit dari baris menit ke jam Anda dan simpan.

maka itu akan berjalan dengan baik.

Aruna D Mahagamage
sumber