pekerjaan cron.daily tidak berjalan

19

Saya menciptakan 3 pekerjaan cron harian untuk dijalankan.

Di bawah ini adalah tiga yang ditempatkan di etc / cron.daily

rkhunter.sh

#!/bin/sh
(
rkhunter --versioncheck
rkhunter --update
rkhunter --cronjob --report-warnings-only
) | mail -s 'rkhunter Daily Run (my server)' [email protected]

chkrootkit.sh

#!/bin/bash
chkrootkit | mail -s "chkrootkit Daily Run (my server)" [email protected]

logwatch.sh

#!/bin/sh
(
logwatch
) | mail -s 'logwatch Daily Log (my server)' [email protected]

Saya mengganti [email protected] ofcourse dengan email saya.

Jika saya menjalankan cronjob ini secara manual itu berfungsi dengan baik ./nameoffile.sh

Tapi itu tidak berjalan setiap hari, apa penyebabnya atau bagaimana saya bisa memeriksanya?

sonicboom
sumber
2
Pastikan bahwa file yang Anda buat di cron.daily / mingguan / hourly / etc dapat dieksekusi, lakukan chmod + x /etc/cron.daily/ apa pun
Turgut Kalfaoglu

Jawaban:

6

Ada dua kemungkinan tersangka yang biasanya menyebabkan cronpekerjaan tidak dapat berjalan.

Yang pertama adalah masalah izin, yaitu pengguna dapat menjalankan skrip / perintah tetapi daemon cron tidak bisa karena pekerjaannya ada di pekerjaan cron pengguna yang salah. Sebagai contoh, pengguna membuat skrip atau menjalankan perintah dengan hak istimewa yaitu menggunakan sudo, lalu menambahkan skrip / perintah yang diuji ke daftar tugas cronnya ( crontab). Hasilnya adalah pekerjaan cron pengguna tidak akan dapat berjalan karena membutuhkan hak istimewa yang ditingkatkan.

  • Untuk menempatkan pekerjaan cron dalam jenis crontab pengguna saat ini crontab -e
  • Untuk menempatkan pekerjaan cron dalam jenis crontab root sudo crontab -e

Alasan kedua adalah path, untuk memastikan skrip akan dieksekusi, pengguna harus menambahkan path lengkap ke skrip yang akan dieksekusi di crontab. Solusi lain adalah dengan memperluas variabel PATH pengguna root dengan meletakkan baris berikut di bagian atas file crontab mereka:

PATH=/usr/sbin:/usr/bin:/sbin:/bin

sebagai wiki komunitas menyebutkan .

Anda mungkin ingin membaca wiki komunitas tentang cron karena memberikan perincian lebih lanjut tentang hal di atas.

Stef K
sumber
Jadi, apakah saya hanya meletakkan nama file di sana?
sonicboom
Sebenarnya mengatakan bahwa tidak ada pekerjaan cron sebelumnya untuk root dan Anda akan menulis pertama Anda dan kemudian meminta Anda untuk memilih editor untuk memodifikasi crontab. Cukup pilih satu dari menu (1.bin / ed, dll). Pilih nano yang mudah, cukup perhatikan instruksinya.
Stef K
Jadi untuk menjalankan sekali sehari pada jam 10 malam saya akan meletakkan * 22 * ​​* * test> rkhunter.sh kan?
sonicboom
ah luar biasa! sakit coba sekarang!
sonicboom
Untuk apa tes> rkhunter.sh?
sonicboom
76

Menurut respons ini , masalahnya terletak pada ekstensi .sh. Hapus itu (jadi misalnya ganti nama file Anda dari rkhunter.sh ke rkhunter.

Untuk mengkonfirmasi, jalankan perintah berikut run-parts --test /etc/cron.daily

Jika skrip Anda (rkhunter) termasuk dalam hasil, semuanya baik. Untuk informasi lebih lanjut tentang perintah run-parts, baca halaman manual di dalamnyaman run-parts

pengguna19366
sumber
1
Ini adalah jawaban yang saya cari, setelah berbagai tes, saya menyadari bahwa file skrip lain tanpa ekstensi sh dieksekusi
Albert Català
5
seperti @rharriso katakan dalam jawabannya. ini bukan masalah dengan ".sh" sebagai masalah dengan "." file apa pun dengan ekstensi apa pun akan terlewatkan. mengutip langsung dari man run-parts"nama-nama harus seluruhnya terdiri dari huruf besar dan kecil ASCII, angka ASCII, garis bawah ASCII, dan ASCII minus-tanda hubung"
north-bradley
11

Dalam sistem saya itu karena anacron tidak diinstal.

grep run-parts /etc/crontab

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Jadi instal anacron atau hapus test -x / usr / sbin / anacron

Natim
sumber
1
+1 Bukankah anacron diinstal secara default? Saya harapkan itu. Saya pikir itu akan menyelesaikannya untuk saya. Terima kasih.
lepe
Benar saja, itu tidak ada di tangan saya .. FFS, saya yakin itu, karena skrip mengeksekusi beberapa bulan yang lalu !: dpkg --get-selections | grep cron.. <swears>
Grizly
Ya saya juga tidak tahu apa yang terjadi karena ini adalah paket yang biasanya diinstal pada saat startup.
Natim
10
Ini tidak sepenuhnya benar. anacrontidak perlu; yang ||operator dalam crontab perintah mengeksekusi run-partsketika anacron TIDAK diinstal. Ketika anacrondiinstal, itu membuat run-partsperintah harian / mingguan / bulanan itu berlebihan.
TalkLittle
Jadi mungkin itu karena run-parts tidak berfungsi? Di anycase menginstal anacron memperbaikinya untuk saya.
Natim
10

Saya pikir file dengan ekstensi diabaikan.

Lari:

 run-parts --test /etc/cron.daily

Jika Anda tidak melihat skrip Anda tercantum, hapus ekstensi .sh dan coba lagi.

rharriso
sumber
5

Menambahkan ke Stef jawaban, Anda juga harus memastikan bahwa mereka memiliki bit yang dapat dieksekusi:

$ ls -l
-rwxr-xr-x  1 root root   268 Jun  1 08:06 00logwatch
-rwxr-xr-x  1 root root   311 May 22  2012 0anacron
-rwxr-xr-x  1 root root 15007 Jun  6 14:08 apt

Anda harus dapat menjalankannya menggunakan chmod +x filename.

Braiam
sumber
File apa ini? apakah ini isi dari folder /etc/logrotate.d?
Realtebo
4

Ganti nama file Anda untuk tidak memiliki ekstensi .sh

Untuk memverifikasi ini masalahnya, coba

sudo run-parts --list /etc/cron.daily 

Anda akan melihat itu tidak terdaftar. Jadi jalankan:

mv script.sh script

dan coba daftar lagi. Itu harus terdaftar.

Elan Kivity
sumber
Masalah ini tampaknya mempengaruhi setiap executable yang memiliki ekstensi. Saya memiliki nama file "filename.ca" dan juga tidak akan mencantumkannya sampai saya menamainya juga "filename"
kiwicomb123
0

Saya tidak bisa menjalankannya dengan anacron, saya menghapus anacron dari /etc/crontabdan dieksekusi apt remove --purge anacrondan langsung berfungsi.

Saya tidak mengerti mengapa kita perlu dua penjadwal.

Patrik Laszlo
sumber
0

Situasi yang sama hari ini di sini

aku melakukannya

sudo journalctl -u cron -b | grep -i error

dan ditemukan

cron[815]: Error: bad hour; while reading /etc/crontab
cron[815]: (*system*) ERROR (Syntax error, this crontab file will be ignored)

Saya menemukan bahwa seseorang (saya !!!!) menambahkan baris yang dimulai dengan

20 38 ...

dan jelas jam ke-38 tidak ada!

realtebo
sumber