Bagaimana cara menambahkan entri ke crontab saya?

13

Saya menggunakan crontab untuk pertama kalinya. Ingin menulis beberapa tugas cron tes yang sangat sederhana, dan jalankan.

$crontab * * * * * echo "Hi"

tidak menghasilkan apa-apa.

crontab */1 * * * * echo "hi"

kata */1: No such file or directory.

Juga, bagaimana cara mendaftar tugas cron yang sedang berjalan (bukan hanya yang saya miliki, tetapi yang dimulai oleh pengguna lain seperti root juga).

Dan bagaimana cara menghapus tugas cron tertentu?

xyz
sumber
Untuk instruksi tentang cara mengedit dan membuat pekerjaan cron dan penjelasan tentang struktur file lihat panduan sintaksis crontab
KJS

Jawaban:

21

Anda tidak bisa menggunakan crontabseperti itu. Gunakan man crontabuntuk membaca tentang cara memanggil utilitas ini dengan benar.

Anda ingin menggunakan crontab -euntuk mengedit entri cron pengguna saat ini (Anda dapat menambah / memodifikasi / menghapus baris). Gunakan crontab -luntuk melihat daftar tugas yang dikonfigurasikan saat ini.

Adapun melihat crontab pengguna lain, itu tidak mungkin tanpa menjadi root pada instalasi default. Lihat Bagaimana cara mendaftar semua pekerjaan cron untuk semua pengguna untuk beberapa cara untuk mendaftar semuanya (sebagai root).

Catatan: berhati-hatilah saat Anda menggunakan karakter globbing shell pada baris perintah ( *dan ?terutama). *akan diperluas ke daftar file di direktori saat ini, yang dapat memiliki efek yang tidak diharapkan. Jika Anda ingin memberikan *argumen pada sesuatu, kutiplah ( '*').

Tikar
sumber
jadi saya melakukan crontab -e dan di editor saya memasukkan entri * / 1 * * * * echo "hai" dan ketika saya menyimpan file ini, saya melihat pesan bahwa crontab: menginstal crontab baru. tapi saya tidak melihat pesan hi muncul di layar. Apa yang saya lewatkan sekarang? Terima kasih.
xyz
2
Output crontab tidak akan pernah masuk ke "layar" Anda. Dari halaman manual POSIX untuk crontab: "Jika output standar dan kesalahan standar tidak dialihkan oleh perintah yang dijalankan dari entri crontab, setiap output atau kesalahan yang dihasilkan akan dikirimkan, melalui metode yang bergantung pada implementasi, kepada pengguna."
Mat
1
Output pekerjaan akan dikirim ke kotak surat lokal pemilik pekerjaan. (Menjalankan maildari baris perintah harus mengakses kotak surat lokal Anda, jika dikonfigurasi.) Untuk melihat 'hi' di lingkungan grafis, Anda bisa mengatur tugas sebagai: * * * * * export DISPLAY=:0; xmessage 'hi'.
manatwork
@manatwork Anda juga mungkin perlu XAUTHORITY, yang mungkin tidak mudah .
derobert
7

Ada dua cara untuk mengedit crontab:

  1. secara interaktif, menggunakan crontab -e, yang akan membuka crontabeditor yang ditentukan oleh $VISUALatau $EDITOR, atau

  2. non-interaktif, menggunakan crontab crontab.txt, yang hanya akan mengimpor crontabentri dari file crontab.txt, menggantikan crontab aktif yang ada untuk pengguna saat ini.

Masalah yang Anda miliki adalah bahwa Anda hanya menggunakan crontabperintah yang salah.


Berikut ini menyangkut manipulasi crontab non-interaktif:

Jadi, untuk menghapus tugas tertentu secara terprogram, Anda dapat melakukan sesuatu seperti

$ crontab -l | grep -v 'PATTERN' >crontab.txt && crontab crontab.txt

di mana PATTERNekspresi reguler yang cocok dengan tugas yang ingin Anda hapus. Di sini, crontab -lakan memberi Anda saat ini crontab.

Atau, jika Anda memiliki entri dalam file bernama crontab-fragment.txtyang ingin Anda hapus dari crontab aktif,

$ crontab -l | grep -v -Fx -f crontab-fragment.txt >crontab.txt && crontab crontab.txt

Ini membaca crontab saat ini dan memfilter (menghapus) setiap baris yang juga terjadi pada file crontab-fragment.txtdi direktori saat ini (menggunakan perbandingan string baris penuh). Hasilnya disimpan ke crontab.txtdan kemudian dimuat dari sana untuk mengganti crontab saat ini.

Untuk menambahkan satu atau beberapa tugas , lakukan sesuatu seperti

$ crontab -l | cat - crontab-fragment.txt >crontab.txt && crontab crontab.txt

Ini dengan asumsi bahwa file tersebut crontab-fragment.txtberisi entri yang ingin Anda tambahkan. Bunyinya crontab saat ini, menambahkan entri dari crontab-fragment.txtini dan membuat crontab.txt. The crontab.txtfile maka menggantikan crontab saat ini.

Kusalananda
sumber
2

Jika Anda ingin memodifikasi crontab secara interaktif, jalankan perintah crontab -e, tanpa opsi lain. Ini akan memulai editor pada salinan crontab; ketika Anda keluar dari editor , salinan yang diedit akan menjadi crontab baru. Anda dapat mengontrol editor mana yang dimulai melalui variabel VISUALdan EDITORlingkungan . Untuk daftar crontab Anda, jalankan crontab -l.

Jika Anda ingin memodifikasi crontab dalam sebuah skrip, setel VISUALdan EDITORke path ke skrip atau ke snippet shell yang memodifikasi file yang disediakan. Editor edada kemungkinan di sini, atau sed -ijika implementasi Anda sedmemiliki opsi ini. Jika Anda ingin menambahkan baris tanpa syarat, Anda dapat menggunakan echo … >>. Berhati-hatilah dengan mengutip; jika sama sekali ragu, tulis skrip dan berikan nama skrip tersebut sebagai EDITOR.

script=$(mktemp)
cat <<'EOF' >"$script"
#!/bin/sh
ed -s "$1" <<'EOS'
g/^ *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *echo "hi"$/d
$a
* * * * * echo "hi"
.
w
q
EOS
EOF
Gilles 'SANGAT berhenti menjadi jahat'
sumber
2

Ini agak terlambat, tetapi untuk orang lain mencari di sini. Ada cara yang lebih mudah daripada memanipulasi input / output stream dengan VISUALdan EDITOR.

Anda cukup menulis jadwal cron Anda dalam file, 1 pekerjaan per baris, dan menggunakan perintah crontab [filename]sehingga Anda dapat catpekerjaan Anda filenamesebagai bagian dari skrip Anda dan akhirnya memanggil crontab di akhir jika Anda mau.

sebenarnya ini adalah penggunaan yang paling umum sebagai man crontabpetunjuk dengan mendaftar terlebih dahulu

Lindsay Ryan
sumber
2

Jika Anda ingin menambahkan entri ke crontabdengan otomatisasi atau dari baris perintah, Anda dapat melakukannya (mengatur waktu yang Anda inginkan)

echo "* * * * * /yourpath/yourcommand 2>&1 >> /var/log/somelog.log" >> /var/spool/cron/root (or appropriate username)

Kemudian:

service crond reload

untuk memuat ulang crontab.

Chris Sprucefield
sumber
Ini tidak bisa diangkut; tidak semua unix menyimpan file crontab di bawah /var/spool/cron. Cara yang lebih baik adalah melalui crontab(1)perintah.
thrig
Itu mungkin benar, tetapi itu untuk menunjukkan prinsip bagaimana Anda dapat melakukannya pada suatu sistem, dan ya, crontab melakukan trik jika Anda ingin menambahkan baris demi baris. Itu tidak dimaksudkan untuk menjadi jawaban absolut, tetapi satu jika Anda tahu di mana barang-barang Anda, dan Anda perlu menambahkan secara massal. Ambillah apa adanya.
Chris Sprucefield
1

Cobalah dengan perintah ini:

crontab -e 

lalu tambahkan pekerjaan cron Anda:

*/1 * * * * echo "hi"

dalam file itu.

pengguna158204
sumber
0

Saya ingin menyoroti cara saya menggambarkan di bawah ini meskipun telah disebutkan sebelumnya dalam komentar lain. Saya merasa sangat berguna ketika menambahkan entri ke file dan kemudian menambahkan file ke crontab. File itu akan berisi dua entri di bawah ini dan nama file akan menjadi hello-world-crontab.txt.

  • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • 0 09 * * * python /home/user/greeting.py

Kemudian, saya menjalankan perintah di bawah ini untuk menambahkan entri ini ke crontab.

  • $ crontab hello-world-crontab.txt

Langkah selanjutnya adalah memverifikasi entri ini telah ditambahkan.

  • $ crontab -l

Penjelasan singkat tentang apa yang dilakukan setiap entri:

  • Entri crontab ini menulis "Halo dunia!" ke dalam file /home/user/greeting.txtsetiap hari pukul 9 pagi.
    • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • Crontab ini mengeksekusi file python yang dicetak di baris perintah 'Hello world!' setiap hari jam 9 pagi.
    • 0 09 * * * python /home/user/greeting.py
SylvesterAbreuLoreto
sumber