GNU/Linux >> Belajar Linux >  >> Ubuntu

Cron Job Tidak Dijalankan?

Saya membuat tugas cron untuk menyelamatkan dunia Minecraft saya dari ram setiap 5 menit.
Saya menguji skrip dan tampaknya berhasil.

Ini penampakan scriptnya:

#!/bin/sh


VOLATILE="/home/jonathan/Games/Minecraft/Server/world/"
PERMANENT="/home/jonathan/Games/Minecraft/Server/world_storage/"
rsync -r -t -v "$VOLATILE" "$PERMANENT"

Jadi saya menambahkan tugas cron untuk menjalankan skrip setiap 5 menit, dan sepertinya tidak menjalankannya.

Ini adalah skrip yang saya gunakan:

*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh

Adakah yang bisa membantu saya?

Jawaban yang Diterima:

Anda tidak menentukan bagaimana Anda menambahkan cronjob Anda. Ini membuat perbedaan besar:jika Anda menggunakan crontab -e dalam akun Anda sendiri, skrip dijalankan dengan pengguna Anda (dan dengan demikian entri crontab memiliki satu bidang lebih sedikit — pengguna untuk menjalankannya, seperti yang diketahui). Jika Anda cukup menyalin cuplikan di atas ke /etc/cron.d , itu akan gagal karena Anda tidak menentukan pengguna (atau lebih tepatnya karena tidak menemukan pengguna bernama "bash"). Jadi, Anda harus mengambil langkah-langkah berikut:

  1. perbarui pertanyaan Anda dengan informasi tentang cara Anda menambahkan tugas cron
  2. periksa log sistem (/var/log/syslog; mereka dapat menunjukkan kemungkinan kesalahan)
  3. tambahkan beberapa keluaran debug ke Backup.sh . Anda skrip untuk melihat apakah itu dimulai

Poin ketiga dapat dicapai dengan berbagai cara:

  • tambahkan >>/tmp/testlog.log ke akhir entri crontab Anda (untuk mengarahkan output ke file yang dapat Anda selidiki; selain itu, 2>&1 akan menyertakan keluaran dari konsol kesalahan)
  • tambahkan beberapa baris ke skrip Anda sendiri, seperti mis. echo "Backup.sh started">/tmp/testlog.log

Selain itu:Saat Anda ingin skrip Anda dijalankan menggunakan bash , Anda tidak boleh menyuruhnya menggunakan /bin/sh (yang akan membuatnya menggunakan dash pada instalasi default Ubuntu), melainkan /bin/bash . Kemudian buat itu dapat dieksekusi, dan Anda bahkan dapat menghilangkan "bash" dari entri crontab Anda.

Pembaruan:

Menurut komentar Anda pada jawaban saya, Anda menggunakan crontab -e untuk membuat pekerjaan, dan menurut log sistem Anda, itu dijalankan, tetapi definisinya agak

*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh &>/dev/null

Ini mengalihkan semua output ke penyimpanan terbesar di sistem Anda, "lubang hitam":/dev/null makan semuanya (tetapi tidak pernah mengembalikan apa pun). Mengarahkan STDOUT serta STDERR dengan cara ini membuat Anda kehilangan laporan kesalahan — jadi Anda tidak pernah tahu bahwa itu terjadi sama sekali, apalagi detailnya. Untuk pengujian, Anda harus menghilangkan &>/dev/null bagian sepenuhnya. Bahkan jika berhasil, Anda hanya boleh menekan output yang tidak perlu — karena jika tidak, Anda tidak akan pernah tahu kapan ada yang tidak beres. Jadi lebih baik tinggalkan ampersand setidaknya, sehingga Cron dapat melaporkan kesalahan yang terjadi.

Terkait:Dok USB untuk HDD Seagate 4TB hanya berfungsi dengan data kurang dari 2,2TB?

Selanjutnya:Setelah output dialihkan (seperti dalam kasus Anda ke /dev/null ), menambahkan pengalihan lain ke akhir tidak akan membuahkan hasil, karena semuanya sudah hilang. Jadi saya harus menyesuaikan saran di atas dari "tambahkan ... ke akhir entri crontab Anda" menjadi "ganti itu di entri crontab Anda" 😉


Ubuntu
  1. Jadwalkan Skrip Apt-get Menggunakan Cron?

  2. Pekerjaan Cron saya tidak berfungsi

  3. Mengelola Duplikat Cron Job Saat Menjalankan Skrip

  1. Masalah Crontab:Cron Job Tidak Berfungsi Saat Menggunakan Persentase

  2. Meneruskan parameter $_GET ke tugas cron

  3. pekerjaan cron terkadang tidak berjalan

  1. Cron Job Untuk Memeriksa Apakah Script Php Berjalan, Jika Tidak Maka Jalankan?

  2. Penggunaan &Kebijakan Pekerjaan Cron

  3. Uji tugas cron mingguan