bagaimana saya bisa membuat cron menjalankan pekerjaan sekarang, untuk pengujian / debugging? tanpa mengubah jadwal!

134

Saya memiliki tugas cron yang dijadwalkan untuk berjalan setiap hari, selain mengubah jadwal, apakah ada cara lain untuk melakukan uji coba perintah sekarang untuk melihat apakah itu berfungsi sebagaimana dimaksud?

Ali
sumber
Saya tidak mengerti pertanyaan Anda? Kenapa tidak jalankan saja perintahnya?
favadi
21
Saya tahu perintah itu berfungsi ketika memasukkannya ke dalam shell (shell saya), tetapi saya ingin tahu apakah itu berfungsi ketika cronmenjalankannya, itu dapat dipengaruhi oleh ENV atau hal-hal spesifik shell ( ~ekspansi) atau kepemilikan dan hal-hal izin atau ...
Ali
2
Jadi mengapa tidak membuat cron job run baru setiap menit dengan perintah yang sama?
favadi
13
Inilah yang akhirnya saya lakukan, tetapi saya bertanya-tanya apakah ada cara untuk memberi tahu cron Anda ingin tes berjalan pada pekerjaan no 7! Tentunya orang lain memiliki masalah / permintaan / keinginan ini sebelumnya!
Ali
4
Sangat terlambat ke tempat kejadian di sini melalui google tetapi ada yang salah tentang jawaban favadi. Jelas dia ingin mengujinya dari cron dan tanpa mengedit crontab secara khusus untuk melakukan itu. Sedikit lebih buruk daripada seseorang yang mengatakan kepada Anda apa yang Anda inginkan salah ketika mereka belum mencoba memahami kasus penggunaan.
HörmannHH

Jawaban:

32

Sejauh yang saya tahu tidak ada cara untuk langsung melakukan itu karena cron memiliki tujuan khusus - menjalankan jadwal perintah pada waktu tertentu. Jadi yang terbaik adalah membuat entri crontab secara manual atau menulis skrip yang menghapus dan mengatur ulang lingkungan.

Ulrich Dangel
sumber
57

Anda dapat memaksa crontab untuk dijalankan dengan perintah berikut:

run-parts /etc/cron.daily
Vadim Sluzky
sumber
9
... dengan asumsi bahwa pekerjaan cron OP (diminta 3 tahun yang lalu) ada di cron.daily dibandingkan dengan crontab individu.
Jeff Schaller
18
Namun ini tidak sepenuhnya mensimulasikan lingkungan pengguna cron, jadi sangat mungkin bahwa Anda masih akan memiliki bug karena begitu Anda menjalankan skrip Anda sebagai pekerjaan cron yang sebenarnya, PATH Anda dan utusan lainnya mungkin berbeda dari pengguna yang Anda lakukan run-parts /etc/cron.daily. Saya sedang memerangi bug ini sekarang, karena skrip saya akan berjalan dengan baik run-partstetapi gagal ketika benar-benar berjalan di bawah pengguna cron.
ArtHare
42

Anda dapat mensimulasikan lingkungan pengguna cron seperti yang dijelaskan dalam "Menjalankan pekerjaan cron secara manual dan segera" . Ini akan memungkinkan Anda untuk menguji pekerjaan itu berfungsi ketika akan dijalankan sebagai pengguna cron.


Kutipan dari tautan:


Langkah 1 : Saya meletakkan baris ini sementara di crontab pengguna:

* * * * *   /usr/bin/env > /home/username/tmp/cron-env

kemudian mengeluarkannya begitu file itu ditulis.

Langkah 2 : Buat sendiri skrip bash run-as-cron kecil yang berisi:

#!/bin/bash
/usr/bin/env -i $(cat /home/username/tmp/cron-env) "$@"

Jadi, sebagai pengguna yang dimaksud, saya bisa

run-as-cron /the/problematic/script --with arguments --and parameters
Michael Barton
sumber
Trik yang berguna. Tentu saja, itu tidak akan membantu jika Anda memiliki tanda persen pada perintah Anda.
basic6