Bagaimana cara menulis cron yang akan menjalankan skrip setiap hari di tengah malam?

144

Saya pernah mendengar crontab adalah pilihan yang baik, tetapi bagaimana cara saya menulis baris dan di mana saya meletakkannya di server?

Matt Elhotiby
sumber

Jawaban:

261

Berikut tutorial yang bagus tentang apa itu crontab dan bagaimana menggunakannya di Ubuntu. Baris crontab Anda akan terlihat seperti ini:

00 00 * * * ruby path/to/your/script.rb

( 00 00menunjukkan tengah malam - 0 menit dan 0 jam - dan *artinya setiap hari setiap bulan.)

Sintaksis: 
  mm hh dd mt wd perintah

  mm menit 0-59
  jam 0-23
  hari di bulan 1-31
  mt bulan 1-12
  hari dalam seminggu 0-7 (Minggu = 0 atau 7)
  perintah: apa yang ingin Anda jalankan
  semua nilai numerik dapat diganti dengan * yang berarti semua
Jordan Running
sumber
1
Jangan sampai Anda melewatkan kolom 'run-as-user'?
Lucas Cimon
4
@LucasCimon Kolom pengguna (yang akan pergi sebelum perintah) diizinkan di /etc/crontab(di Ubuntu), tetapi ketika Anda menjalankan crontab -eAnda sedang mengedit crontab khusus pengguna, yang tidak mengizinkan kolom ini. Ubuntu IIRC mencegah keluar /etc/crontabsecara manual karena mungkin ditimpa. Lihat di sini: stackoverflow.com/questions/8475694/…
Jordan Running
@ Jordan, jadi jawaban untuk crontab untuk root adalahsudo crotab -u root -e
dashesy
40

dari halaman manual

linux$ man -S 5 crontab

   cron(8) examines cron entries once every minute.

   The time and date fields are:

          field          allowed values
          -----          --------------
          minute         0-59
          hour           0-23
          day of month   1-31
          month          1-12 (or names, see below)
          day of week    0-7 (0 or 7 is Sun, or use names)
   ...
   # run five minutes after midnight, every day
   5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
   ...

Adalah baik untuk mencatat "nama panggilan" khusus yang dapat digunakan (didokumentasikan di halaman manual), khususnya "@reboot" yang tidak memiliki alternatif waktu dan tanggal.

   # Run once after reboot.
   @reboot         /usr/local/sbin/run_only_once_after_reboot.sh

Anda juga dapat menggunakan trik ini untuk menjalankan tugas cron Anda beberapa kali per menit.

   # Run every minute at 0, 20, and 40 second intervals
   * * * * *       sleep 00; /usr/local/sbin/run_3times_per_minute.sh
   * * * * *       sleep 20; /usr/local/sbin/run_3times_per_minute.sh
   * * * * *       sleep 40; /usr/local/sbin/run_3times_per_minute.sh

Untuk menambahkan pekerjaan cron, Anda dapat melakukan salah satu dari tiga hal berikut:

  1. tambahkan perintah ke crontab pengguna, seperti yang ditunjukkan di atas (dan dari crontab, bagian 5, halaman manual).

    • sunting crontab pengguna sebagai root crontab -e -u <username>
    • atau edit crontab pengguna saat ini hanya dengan crontab -e
    • Anda dapat mengatur editor dengan EDITORvariabel lingkungan
      • env EDITOR=nano crontab -e -u <username>
      • atau atur nilai EDITOR untuk seluruh sesi shell Anda
        1. export EDITOR=vim
        2. crontab -e
    • Jadikan skrip dapat dieksekusi dengan chmod a+x <file>


  1. buat skrip / program sebagai tugas cron, dan tambahkan ke /etc/cron.*lydirektori anacron sistem

    • direktori anacron /etc/cron.*ly:
      • /etc/cron.daily
      • /etc/cron.hourly
      • /etc/cron.monthly
      • /etc/cron.weekly
    • seperti dalam:
      • /etc/cron.daily/script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh - membuatnya dapat dieksekusi
    • Lihat juga halaman manual anacron: man anacron
    • Jadikan skrip dapat dieksekusi dengan chmod a+x <file>
    • Kapan skrip cron. * Ly ini dijalankan?
      • Untuk RHEL / CentOS 5.x, mereka dikonfigurasikan dalam /etc/crontabatau /etc/anacrontabuntuk dijalankan pada waktu yang ditentukan
      • RHEL / CentOS 6.x + dan Fedora 17+ sistem Linux hanya mendefinisikan ini /etc/anacrontab, dan mendefinisikan cron./etc/cron.d/0hourly


  1. Atau, Anda dapat membuat crontables sistem di /etc/cron.d.

    • Sintaks crontab yang dijelaskan sebelumnya (dengan tambahan menyediakan pengguna untuk melakukan setiap pekerjaan sebagai) dimasukkan ke dalam file, dan file tersebut jatuh ke direktori /etc/cron.d.
    • Ini mudah dikelola dalam kemasan sistem (mis. Paket RPM), jadi biasanya khusus aplikasi.
    • Perbedaan sintaksnya adalah bahwa pengguna harus ditentukan untuk pekerjaan cron setelah bidang waktu / tanggal dan sebelum perintah untuk dijalankan.
    • File yang ditambahkan ke /etc/cron.dtidak perlu dapat dieksekusi.
    • Berikut adalah contoh pekerjaan yang dijalankan sebagai pengguna someuser, dan penggunaan /bin/bashsebagai shell dipaksa.


   File: /etc/cron.d/myapp-cron
   # use /bin/bash to run commands, no matter what /etc/passwd says
   SHELL=/bin/bash
   # Execute a nightly (11:00pm) cron job to scrub application records
   00 23 * * * someuser /opt/myapp/bin/scrubrecords.php
Russell E Glaue
sumber
5

Terkadang Anda perlu menentukan PATH dan GEM_PATH menggunakan crontab dengan rvm.

Seperti ini:

# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global

# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb
LV2014
sumber
4

Panduan cepat untuk mengatur pekerjaan cron

Buat file teks baru, contoh: mycronjobs.txt

Untuk setiap pekerjaan harian (00:00, 03:45), simpan baris jadwal di mycronjobs.txt

00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh

Kirim pekerjaan ke cron (setiap kali Anda menjalankan ini, cron menghapus apa yang telah disimpan dan memperbarui dengan informasi baru di mycronjobs.txt )

crontab mycronjobs.txt

Informasi Berguna Ekstra

Lihat pekerjaan cron saat ini

crontab -l

Hapus semua pekerjaan cron

crontab -r
dyltini
sumber
Sintaks crontab Anda salah untuk 03:45. Kolom crontab adalah Menit kemudian Jam, yaitu "45 03" - Anda telah mundur di pos Anda.
Russell E Glaue
1

Anda dapat menjalankan skrip shell dengan dua cara, baik menggunakan cron job atau dengan menulis skrip shell

Mari kita asumsikan nama skrip Anda adalah "yourscript.sh"

Pertama periksa izin pengguna skrip. gunakan perintah di bawah ini untuk memeriksa izin pengguna skrip

ll script.sh

Jika skrip di root, gunakan perintah di bawah ini

sudo crontab -e

Kedua jika skrip menampung pengguna "ubuntu", maka gunakan perintah di bawah ini

crontab -e

Tambahkan baris berikut di crontab Anda: -

55 23 * * * /path/to/yourscript.sh

Cara lain untuk melakukan ini adalah dengan menulis skrip dan menjalankannya di backgroud

Ini adalah skrip di mana Anda harus meletakkan nama skrip Anda (misalnya: - youscript.sh) yang akan berjalan pada 23:55 setiap hari

#!/bin/bash while true do /home/modassir/yourscript.sh sleep 1d done

simpan dalam file (beri nama "every-day.sh")

sleep 1d - artinya menunggu selama satu hari dan kemudian berjalan lagi.

sekarang beri izin untuk skrip Anda. gunakan perintah di bawah ini: -

chmod + x every-day.sh

sekarang, jalankan skrip shell ini di latar belakang dengan menggunakan "nohup". Ini akan terus mengeksekusi skrip bahkan setelah Anda keluar dari sesi Anda.

gunakan perintah di bawah ini untuk menjalankan skrip.

nohup ./every-day.sh &

Catatan: - untuk menjalankan "yourscript.sh" pukul 23.55 setiap hari, Anda harus menjalankan skrip "every-day.sh" tepat pukul 23.55 sore.

Modassir Haider
sumber
0

Masukkan kalimat ini dalam file crontab: 0 0 * * * / usr / local / bin / python /opt/ByAccount.py> /var/log/cron.log 2> & 1

MAES
sumber