Mengapa crontab saya tidak berfungsi, dan bagaimana saya bisa memecahkan masalah itu?

226

Ini adalah Pertanyaan Canonical tentang penggunaan cron & crontab.

Anda telah diarahkan ke sini karena komunitas cukup yakin bahwa jawaban untuk pertanyaan Anda dapat ditemukan di bawah. Jika pertanyaan Anda tidak dijawab di bawah, maka jawabannya akan membantu Anda mengumpulkan informasi yang akan membantu komunitas membantu Anda. Informasi ini harus diedit menjadi pertanyaan awal Anda.

Jawaban untuk ' Mengapa crontab saya tidak berfungsi, dan bagaimana saya bisa memecahkan masalah itu? 'bisa dilihat di bawah ini. Ini membahas cronsistem dengan crontab yang disorot.

Eric Leschinski
sumber
2
Ini adalah penipuan besar Alasan mengapa crontab tidak berfungsi di AskUbuntu.
Dan Dascalescu
1
@DanDascalescu Sepertinya Eric perlu mendapatkan lebih banyak rep
Saya Orang yang Paling Bodoh
1
Saya baru saja bergabung dengan Server Fault SE (jadi hanya 101 rep), tetapi akan senang memberikan pertanyaan ini -1 !! Apakah pertanyaan ini hanya dibuat untuk mendapatkan perwakilan? @IamtheMostStupidPerson Sepenuhnya setuju dengan Anda ...
Holyprogrammer
Ideologi barat padawan berusia 13 tahun ini adalah buku teks dan menyilaukan, seperti supernova. Untuk menjawab kedua pertanyaan Anda: ya, saya melakukannya untuk perwakilan, dan ya, Eric perlu mendapatkan lebih banyak reputasi. Berapa banyak rep yang saya butuhkan ?? Lebih. youtu.be/IaDt9T7BF38?t=262
Eric Leschinski

Jawaban:

317

Bagaimana memperbaiki semua masalah / masalah terkait crontab Anda (Linux)


Ini adalah wiki komunitas , jika Anda melihat ada yang salah dengan jawaban ini atau memiliki informasi tambahan, silakan edit.


Pertama, terminologi dasar:

  • cron (8) adalah daemon yang menjalankan perintah yang dijadwalkan.
  • crontab (1) adalah program yang digunakan untuk memodifikasi file pengguna crontab (5).
  • crontab (5) adalah file per pengguna yang berisi instruksi untuk cron (8).

Selanjutnya, edukasi tentang cron:

Setiap pengguna pada suatu sistem dapat memiliki file crontab mereka sendiri. Lokasi file root dan crontab pengguna bergantung pada sistem tetapi biasanya di bawah /var/spool/cron.

Ada file sistem-lebar /etc/crontab, /etc/cron.ddirektori mungkin berisi fragmen crontab yang juga dibaca dan ditindaklanjuti oleh cron. Beberapa distribusi Linux (mis. Red Hat) juga memiliki /etc/cron.{hourly,daily,weekly,monthly}direktori, skrip di dalamnya yang akan dieksekusi setiap jam / hari / minggu / bulan, dengan privilege root.

root selalu dapat menggunakan perintah crontab; pengguna reguler mungkin atau mungkin tidak diberi akses. Ketika Anda mengedit file crontab dengan perintah crontab -edan menyimpannya, crond mengeceknya untuk validitas dasar tetapi tidak menjamin file crontab Anda terbentuk dengan benar. Ada file bernama cron.denyyang akan menentukan pengguna mana yang tidak dapat menggunakan cron. Lokasi cron.denyfile tergantung pada sistem dan dapat dihapus yang akan memungkinkan semua pengguna untuk menggunakan cron.

Jika komputer tidak dinyalakan atau crond daemon tidak berjalan, dan tanggal / waktu untuk menjalankan perintah telah berlalu, crond tidak akan mengejar dan menjalankan kueri yang lalu.

keterangan crontab, cara merumuskan perintah:

Perintah crontab diwakili oleh satu baris. Anda tidak dapat menggunakan \untuk memperluas perintah melalui beberapa baris. Tanda hash ( #) mewakili komentar yang berarti apa pun pada baris itu diabaikan oleh cron. Ruang kosong dan garis-garis kosong terkemuka diabaikan.

Berhati-hatilah saat menggunakan tanda persen ( %) di perintah Anda Kecuali mereka lolos \%mereka dikonversi menjadi baris baru dan semuanya setelah non-lolos pertama %diteruskan ke perintah Anda di stdin.

Ada dua format untuk file crontab:

  • Crontab pengguna

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
    # |  |  |  |  |
    # *  *  *  *  *   command to be executed
    
  • Sistem luas /etc/crontabdan /etc/cron.dfragmen

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    

Perhatikan bahwa yang terakhir membutuhkan nama pengguna. Perintah akan dijalankan sebagai pengguna yang disebutkan.

5 bidang pertama dari baris mewakili waktu ketika perintah harus dijalankan. Anda dapat menggunakan angka atau nama hari / bulan yang berlaku dalam spesifikasi waktu.

  • Bidang dipisahkan oleh spasi atau tab.
  • Tanda koma ( ,) digunakan untuk menentukan daftar, misalnya 1,4,6,8 yang berarti dijalankan pada 1,4,6,8.
  • Rentang ditentukan dengan tanda hubung ( -) dan dapat digabungkan dengan daftar misalnya 1-3,9-12 yang berarti antara 1 dan 3 kemudian antara 9 dan 12.
  • The /karakter dapat digunakan untuk memperkenalkan langkah misalnya 2/5 yang berarti mulai dari 2 maka setiap 5 (2,7,12,17,22 ...). Mereka tidak membungkus melewati akhir.
  • Tanda bintang ( *) di bidang menandakan seluruh rentang untuk bidang itu (misalnya 0-59untuk bidang menit).
  • Rentang dan langkah dapat digabungkan misalnya */2menandakan mulai dari minimum untuk bidang yang relevan kemudian setiap 2 misalnya 0 untuk menit (0,2 ... 58), 1 untuk bulan (1,3 ... 11) dll.

Men-debug perintah cron

Periksa suratnya!

Secara default cron akan mengirimkan output apa pun dari perintah ke pengguna menjalankan perintah sebagai. Jika tidak ada output maka tidak akan ada email. Jika Anda ingin cron mengirim email ke akun lain maka Anda dapat mengatur variabel lingkungan MAILTO dalam file crontab misalnya

[email protected]
1 2 * * * /path/to/your/command

Tangkap output sendiri

Anda dapat mengarahkan stdout dan stderr ke file. Sintaks yang tepat untuk menangkap keluaran dapat bervariasi tergantung pada apa yang digunakan cron shell. Berikut adalah dua contoh yang menyimpan semua output ke file di /tmp/mycommand.log:

1 2 * * * /path/to/your/command &>/tmp/mycommand.log
1 2 * * * /path/to/your/command >/tmp/mycommand.log 2>&1

Lihatlah log

Cron mencatat aksinya melalui syslog, yang (tergantung pada pengaturan Anda) sering pergi ke /var/log/cronatau /var/log/syslog.

Jika perlu, Anda dapat memfilter pernyataan cron dengan mis

grep CRON /var/log/syslog 

Sekarang kita telah membahas dasar-dasar cron, di mana file-file itu dan bagaimana menggunakannya, mari kita lihat beberapa masalah umum.

Periksa apakah cron sedang berjalan

Jika cron tidak berjalan maka perintah Anda tidak akan dijadwalkan ...

ps -ef | grep cron | grep -v grep

harus membuat Anda mendapatkan sesuatu seperti

root    1224   1  0 Nov16 ?    00:00:03 cron

atau

root    2018   1  0 Nov14 ?    00:00:06 crond

Jika tidak restart itu

/sbin/service cron start

atau

/sbin/service crond start

Mungkin ada metode lain; gunakan apa yang disediakan distro Anda.

cron menjalankan perintah Anda di lingkungan terbatas.

Variabel lingkungan apa yang tersedia cenderung sangat terbatas. Biasanya, Anda hanya akan mendapatkan beberapa variabel yang didefinisikan, seperti $LOGNAME, $HOME, dan $PATH.

Dari catatan khusus PATHadalah terbatas pada /bin:/usr/bin. Sebagian besar masalah "skrip cron saya tidak berfungsi" disebabkan oleh jalur terbatas ini . Jika perintah Anda berada di lokasi yang berbeda, Anda dapat menyelesaikan ini dalam beberapa cara:

  1. Berikan path lengkap ke perintah Anda.

    1 2 * * * /path/to/your/command
    
  2. Berikan PATH yang cocok di file crontab

    PATH=/usr:/usr/bin:/path/to/something/else
    1 2 * * * command 
    

Jika perintah Anda memerlukan variabel lingkungan lain, Anda juga dapat menentukannya di file crontab.

cron menjalankan perintah Anda dengan cwd == $ HOME

Terlepas dari di mana program yang Anda jalankan berada pada sistem file, direktori kerja program saat ini ketika cron menjalankannya adalah direktori home pengguna . Jika Anda mengakses file di program Anda, Anda harus mempertimbangkan ini jika Anda menggunakan jalur relatif, atau (lebih disukai) hanya menggunakan jalur yang sepenuhnya memenuhi syarat di mana-mana, dan menyimpan semua orang banyak kebingungan.

Perintah terakhir di crontab saya tidak berjalan

Cron umumnya mengharuskan perintah diakhiri dengan baris baru. Edit crontab Anda; pergi ke akhir baris yang berisi perintah terakhir dan masukkan baris baru (tekan enter).

Periksa format crontab

Anda tidak dapat menggunakan crontab pengguna yang diformat untuk / etc / crontab atau bagian-bagian di /etc/cron.d dan sebaliknya. Crontab yang diformat pengguna tidak menyertakan nama pengguna di posisi ke-6 berturut-turut, sementara crontab yang diformat sistem menyertakan nama pengguna dan menjalankan perintah sebagai pengguna.

Saya menaruh file di /etc/cron.{hourly ,daily ,weekly ,monthly} dan tidak berjalan

  • Pastikan nama file tidak memiliki ekstensi lihat run-parts
  • Pastikan file telah menjalankan izin.
  • Beri tahu sistem apa yang akan digunakan ketika menjalankan skrip Anda (mis. Diletakkan #!/bin/shdi atas)

Bug terkait tanggal Cron

Jika tanggal Anda baru-baru ini diubah oleh pengguna atau pembaruan sistem, zona waktu atau lainnya, maka crontab akan mulai berperilaku tidak menentu dan menunjukkan bug aneh, kadang-kadang berfungsi, kadang tidak. Ini adalah upaya crontab untuk mencoba "melakukan apa yang Anda inginkan" ketika waktu berubah dari bawahnya. Bidang "menit" akan menjadi tidak efektif setelah jam diubah. Dalam skenario ini, hanya tanda bintang yang akan diterima. Mulai ulang cron dan coba lagi tanpa terhubung ke internet (sehingga tanggal tidak memiliki kesempatan untuk mengatur ulang ke salah satu server waktu).

Tanda persen, lagi

Untuk menekankan saran tentang tanda persen, berikut adalah contoh apa yang dilakukan cron dengan mereka:

# cron entry
* * * * * cat >$HOME/cron.out%foo%bar%baz

akan membuat file ~ / cron.out yang berisi 3 baris

foo
bar
baz

Ini sangat mengganggu saat menggunakan dateperintah. Pastikan untuk menghindari tanda persen

* * * * * /path/to/command --day "$(date "+\%Y\%m\%d")"
Eric Leschinski
sumber
Mungkin ingin juga menyebutkan di bagian 'terbatas env' bahwa LD_LIBRARY_PATH mungkin juga perlu memiliki direktori tambahan yang ditetapkan jika tugas cron Anda gagal karena tidak dapat menemukan perpustakaan bersama.
DavidJ
perhatikan bahwa Anda bahkan dapat menulis sesuatu seperti ini: 35 1,5-23 / 2 * * * do_something bukannya 35,1,5,7,9, .. * * * Selain itu, crontab.guru ini menerjemahkan entri yang Anda buat untuk bahasa manusia.
Dennis Nolte
1
Capture output tidak berfungsi untuk saya, mungkin karena shell sh. Saya pikir ini lebih portabel: ... /path/to/your/command >/tmp/mycommand.log 2>&1
chus
ini bekerja untuk saya:sudo apt-get install postfix
jmunsch
apakah pekerjaan cron juga tergantung pada seberapa berat file tersebut? Karena saya menjalankan dunia hello sederhana dengan python dengan cron, itu berhasil. Tapi kode kedua saya agak berat dan biasanya berjalan tetapi dengan cron tidak memberikan output apa pun ke dalam file.
Devendra Bhat
22

Debian Linux dan turunannya (Ubuntu, Mint, dll) memiliki beberapa kekhasan yang dapat mencegah pekerjaan cron Anda dari mengeksekusi; khususnya, file-file di /etc/cron.d, /etc/cron.{hourly,daily,weekly,monthly}harus:

  • dimiliki oleh root
  • hanya dapat ditulis oleh root
  • tidak dapat ditulis oleh grup atau pengguna lain
  • punya nama tanpa titik '.' atau karakter khusus lainnya selain '-' dan '_'.

Yang terakhir sakit secara teratur pengguna yang tidak menaruh curiga; khususnya script di salah satu folder tersebut bernama whatever.sh, mycron.py, testfile.pl, dll akan tidak dieksekusi, pernah.

Dalam pengalaman saya, poin khusus ini sejauh ini merupakan alasan yang paling sering untuk cronjob yang tidak mengeksekusi pada Debian dan turunannya.

Lihat man cronuntuk lebih jelasnya, jika perlu.

wazoox
sumber
19

Jika cronjobs Anda berhenti berfungsi, periksa apakah kata sandi Anda belum kedaluwarsa, karena setelah itu, semua pekerjaan cron berhenti.
Akan ada pesan yang /var/log/messagesmirip dengan yang di bawah ini yang menunjukkan masalah dengan mengautentikasi pengguna:

(username) FAILED to authorize user with PAM (Authentication token is no longer valid; new one required)

Munkeh72
sumber
2
Baru saja mendapatkan ini juga (file pesan kesalahan / var / log / syslog untuk saya). Dalam kasus saya kotak DigitalOcean yang, pada saat membuat, mereka mereset kata sandi root (opsional) ke yang lain, dan tampaknya sampai Anda masuk ke sana dan mengubahnya, semua pekerjaan cron tidak berjalan. Kekecewaan. Perbaikan adalah sesuatu sepertisudo -u root passwd
rogerdpack
12

Jadwal yang tidak biasa dan tidak teratur

Cron adalah semua hal yang dianggap sebagai penjadwal yang sangat mendasar dan sintaksis tidak dengan mudah memungkinkan administrator untuk merumuskan jadwal yang sedikit lebih jarang.

Pertimbangkan pekerjaan berikut yang biasanya akan dijelaskan untuk "berjalan commandsetiap 5 menit" :

*/5 * * * * /path/to/your/command

melawan:

*/7 * * * * /path/to/your/command

yang tidak selalu berjalan commandsetiap 7 menit .

Ingat bahwa /karakter dapat digunakan untuk memperkenalkan langkah tetapi langkah-langkah itu tidak membungkus di luar akhir seri misalnya */7yang cocok dengan setiap menit ke-7 dari menit 0-59 yaitu 0,7,14,21,28,35,42,49,49, 56 tetapi antara satu jam dan selanjutnya akan ada hanya 4 menit antara batch , setelah 00:56seri baru dimulai pada 01:00, 01:07dll (dan batch tidak akan berjalan pada 01:03, 01:10, 01:17dll).


Apa yang harus dilakukan?

Buat banyak batch

Daripada pekerjaan cron tunggal, buat beberapa batch yang digabungkan menghasilkan jadwal yang diinginkan.

Misalnya untuk menjalankan batch setiap 40 menit (00:00, 00:40, 01:20, 02:00 dll.) Membuat dua batch, yang berjalan dua kali pada jam genap dan yang kedua yang hanya menjalankan jam ganjil:

# The following lines create a batch that runs every 40 minutes i.e.

# runs on   0:00, 0:40,        02:00, 02:40         04:00 etc to 22:40
0,40 */2 * * * /path/to/your/command

# runs on               01:20,               03:20,       etc to 23:20
20 1/2 * * * /path/to/your/command

# Combined: 0:00, 0:40, 01:20, 02:00, 02:40, 03:20, 04:00 etc.

Jalankan batch Anda lebih jarang

Daripada menjalankan batch Anda setiap 7 menit, yang merupakan jadwal yang sulit untuk dipecah dalam beberapa batch, jalankan saja setiap 10 menit.

Mulai batch Anda lebih sering (tetapi mencegah beberapa batch berjalan bersamaan)

Banyak jadwal aneh berkembang karena runtime batch meningkat / berfluktuasi dan kemudian batch dijadwalkan dengan sedikit margin keamanan tambahan untuk mencegah berjalannya batch yang sama dari tumpang tindih dan berjalan secara bersamaan.

Sebaliknya, pikirkan secara berbeda dan buat cronjob yang akan gagal dengan anggun ketika lari sebelumnya belum selesai, tetapi yang akan berjalan sebaliknya. Lihat T&J ini :

* * * * * /usr/bin/flock -n /tmp/fcj.lockfile /usr/local/bin/frequent_cron_job 

Itu hampir akan segera memulai menjalankan baru setelah menjalankan sebelumnya dari / usr / local / bin / frequent_cron_job telah selesai.

Mulai batch Anda lebih sering (tapi keluarlah dengan anggun ketika kondisinya tidak tepat)

Karena sintaks cron terbatas, Anda dapat memutuskan untuk menempatkan kondisi dan logika yang lebih kompleks dalam pekerjaan batch itu sendiri (atau dalam skrip pembungkus di sekitar pekerjaan batch yang ada). Itu memungkinkan Anda untuk memanfaatkan kapabilitas lanjutan dari bahasa skrip favorit Anda, mengomentari kode Anda dan akan mencegah konstruksi yang sulit dibaca di entri crontab itu sendiri.

Dalam bash maka seven-minute-jobakan terlihat seperti sesuatu seperti:

#!/bin/bash
# seven-minute-job
# This batch will only run when 420 seconds (7 min) have passed
# since the file /tmp/lastrun was either created or updated

if [ ! -f /tmp/lastrun ] ; then
    touch /tmp/lastrun
fi

if [ $(( $(date +%s) - $(date -r /tmp/lastrun +%s) )) -lt 420 ] ; then
     # The minimum interval of 7 minutes between successive batches hasn't passed yet.
    exit 0
fi

####  Start running your actual batch job below

/path/to/your/command

#### actual batch job is done, now update the time stamp
date > /tmp/lastrun
#EOF

Yang kemudian Anda dapat dengan aman (mencoba) untuk menjalankan setiap menit:

* * * * * /path/to/your/seven-minute-job

Sebuah masalah yang berbeda, namun sama akan menjadwalkan batch untuk menjalankan pada hari Senin pertama setiap bulan (atau Rabu kedua) dll Cukup menjadwalkan batch untuk menjalankan setiap hari Senin dan keluar ketika tanggal yang tidak antara 1 st atau 7 th dan hari dalam seminggu bukan Senin.

#!/bin/bash
# first-monday-of-the-month-housekeeping-job

# exit if today is not a Monday (and prevent locale issues by using the day number) 
if [ $(date +%u) != 1 ] ; then
  exit 0
fi

# exit if today is not the first Monday
if [ $(date +%d) -gt 7 ] ; then
  exit 0
fi

####  Start running your actual batch job below

/path/to/your/command

#EOF

Yang kemudian dapat Anda jalankan dengan aman (coba) setiap hari Senin:

0 0 * * 1 /path/to/your/first-monday-of-the-month-housekeeping-job

Jangan gunakan cron

Jika kebutuhan Anda kompleks, Anda mungkin mempertimbangkan untuk menggunakan produk yang lebih maju yang dirancang untuk menjalankan jadwal yang rumit (didistribusikan di beberapa server) dan yang mendukung pemicu, ketergantungan pekerjaan, penanganan kesalahan, coba lagi dan coba lagi pemantauan dll. Jargon industri akan menjadi "perusahaan " penjadwalan pekerjaan dan / atau" otomatisasi beban kerja ".

HBruijn
sumber
8

Khusus PHP

Jika Anda memiliki beberapa pekerjaan cron seperti:

php /bla/bla/something.php >> /var/logs/somelog-for-stdout.log

Dan dalam hal kesalahan mengharapkan, bahwa mereka akan dikirimkan kepada Anda, tetapi mereka tidak - periksa ini.

PHP secara default tidak mengirim kesalahan ke STDOUT. @lihat https://bugs.php.net/bug.php?id=22839

Untuk memperbaikinya, tambahkan cli`s php.ini atau di baris Anda (atau di bash wrapper Anda untuk PHP) ini:

  • --define display_startup_errors = 1
  • --define display_errors = 'stderr'

Pengaturan ke-1 akan memungkinkan Anda memiliki karakter seperti 'Memory oops' dan ke-2 - untuk mengarahkan semuanya ke STDERR. Hanya setelah Anda dapat tidur nyenyak karena semua akan dikirim ke email root Anda, bukan hanya dicatat.

gaRex
sumber
2
Laporan kesalahan itu ditutup kembali pada tahun 2007 dengan status tambalan ditambahkan ke cabang PHP 5.2+. Apakah Anda yakin ini diperlukan? Saya baru saja mencoba PHP 5.4 dan sepertinya berfungsi dengan baik. (Masih diperlukan untuk PHP 4).
Xeoncross
@Xeoncross lihat tanggal jawaban :)
gaRex
1
Ya, itulah yang membingungkan saya sejak Anda menjawab pada tahun 2013 dan tiketnya kembali pada '07.
Xeoncross
0

Menambahkan jawaban saya dari sini untuk kelengkapan, dan menambahkan sumber daya lain yang berpotensi membantu:

The cronpengguna memiliki yang berbeda $PATHdari yang Anda lakukan:

Masalah yang sering terjadi dengan crontabentri yang dibuat pengguna adalah mereka lupa cronmenjalankan yang berbeda environmentdari yang mereka lakukan sebagai pengguna yang masuk. Misalnya, pengguna membuat program atau skrip di $HOMEdirektori- nya , dan memasukkan perintah berikut untuk menjalankannya:

$ ./certbot ... 

Perintah berjalan dengan sempurna dari baris perintahnya. Pengguna kemudian menambahkan perintah itu ke miliknya crontab, tetapi ternyata ini tidak berhasil:

*/10 * * * * ./certbot ....

Alasan kegagalan dalam hal ini ./adalah karena lokasi yang berbeda untuk cronpengguna daripada untuk pengguna yang masuk. Artinya, environmentberbeda! PATH adalah bagian dari environment, dan biasanya berbeda untuk cronpengguna. Yang memperumit masalah ini adalah environmentfor crontidak sama untuk semua distribusi * nix , dan ada beberapa versicron

Solusi sederhana untuk masalah khusus ini adalah untuk memberikan cronpengguna spesifikasi jalur lengkap dalam crontabentri:

0 22 * * * /path/to/certbot .....

Apa itu cronpengguna environment?

Dalam beberapa kasus, kita mungkin perlu mengetahui environmentspesifikasi lengkap untuk cronsistem kita (atau kita mungkin hanya ingin tahu). Apa gunanya environmentbagi cronpengguna, dan apa bedanya dengan kami? Selanjutnya, kita mungkin perlu mengetahui environmentuntuk cronpengguna lain - rootmisalnya ... apa yang rootpengguna environmentgunakan cron? Salah satu cara untuk mempelajari ini adalah meminta cronuntuk memberi tahu kami:

  1. Buat skrip shell di direktori home Anda ( ~/) sebagai berikut (atau dengan editor pilihan Anda):
$ nano ~/envtst.sh
  1. Masukkan yang berikut ini di editor, setelah disesuaikan untuk sistem / pengguna Anda:
#!/bin/sh 
/bin/echo "env report follows for user "$USER >> /home/you/envtst.sh.out 
/usr/bin/env >> /home/you/envtst.sh.out 
/bin/echo "env report for user "$USER" concluded" >> /home/you/envtst.sh.out
/bin/echo " " >> /home/you/envtst.sh.out
  1. Simpan file, keluar dari editor dan tetapkan izin file sebagai yang dapat dieksekusi.
$ chmod a+rx ~/envtst.sh
  1. Jalankan skrip yang baru saja Anda buat, dan tinjau hasilnya /home/you/envtst.sh.out. Output ini akan menunjukkan lingkungan Anda saat ini saat $USERAnda masuk sebagai:
$ ./envtst.sh $$ cat /home/you/envtst.sh.out
  1. Buka crontabuntuk diedit:
$ crontab -e -u root
  1. Masukkan baris berikut di bagian bawah Anda crontab:
* * * * *  /home/you/envtst.sh >> /home/you/envtst.sh.err 2>&1

JAWABAN: File keluaran /home/you/envtst.sh.outakan berisi daftar environmentuntuk "pengguna root cron". Setelah Anda tahu itu, sesuaikan crontabentri Anda sesuai.

Saya tidak dapat menentukan jadwal yang saya butuhkan dalam crontabentri saya :

Entri jadwal untuk crontabtentu saja didefinisikan dalam man crontab, dan Anda harus membaca ini. Namun, membaca man crontab, dan memahami jadwal adalah dua hal yang berbeda. Dan trial-and-error pada spesifikasi jadwal bisa menjadi sangat membosankan. Untungnya, ada sumber daya yang dapat membantu: guru crontab. . Masukkan spesifikasi jadwal Anda, dan itu akan menjelaskan jadwal dalam bahasa Inggris.

Akhirnya, dan berisiko menjadi mubazir dengan salah satu jawaban lain di sini, jangan terjebak dalam pemikiran bahwa Anda terbatas pada satu crontabentri saja karena Anda memiliki satu pekerjaan untuk dijadwalkan. Anda bebas menggunakan crontabentri sebanyak yang Anda butuhkan untuk mendapatkan jadwal yang Anda butuhkan.

Seamus
sumber