як я можу змусити cron зараз виконувати завдання для тестування / налагодження? без зміни графіка!


133

У мене є робота cron, яку планується виконувати щодня, окрім зміни розкладу, чи є ще якийсь спосіб зробити тестовий запуск команди, щоб перевірити, чи працює вона за призначенням?


Я не розумію вашого запитання? Чому б просто не запустити команду?
favadi

20
Я знаю, що команда працює, коли вводить її в оболонку (моя оболонка), але я хочу знати, чи працює вона під час cronїї запуску, на неї можуть вплинути ENV або специфічні для оболонки речі ( ~розширення) або речі власності та дозволу або ...
Алі

2
То чому б не створити нову роботу cron щохвилини за допомогою однієї команди?
favadi

13
Це саме те, що я в кінцевому підсумку робив, але я задумався, чи є спосіб сказати cron, що ви хочете пробити тест на роботі № 7! Звичайно, інші мали цю проблему / прохання / побажання раніше!
Алі

4
Дуже пізно на сцену сюди через Google, але у відповіді фаваді було все не так. Зрозуміло, що він хотів би протестувати це з cron і не редагуючи crontab. Чим гірше, ніж хтось каже тобі, що ти хочеш, це не так, коли вони не намагалися зрозуміти випадок використання.
HörmannHH

Відповіді:


32

Наскільки я знаю, немає ніякого способу зробити це безпосередньо, оскільки cron має спеціальну мету - запускати команди розкладу в певний час. Тож найкраще - це або вручну створити запис на кронтабелі, або написати сценарій, який видаляє та скидає середовище.


57

Ви можете змусити запустити crontab за допомогою наступної команди:

run-parts /etc/cron.daily

9
... за припущенням, що робота з роботи з операторами ОП (запитували 3 роки тому) знаходиться в cron.daily, на відміну від окремого crontab.
Jeff Schaller

18
Однак це не повністю імітує середовище користувача cron, тому велика ймовірність, що у вас все ще будуть помилки, тому що після запуску сценарію як фактичної роботи з cron ваш PATH та інші envvars можуть відрізнятися від користувачів, які ви робили run-parts /etc/cron.daily. Я зараз борюся з цією помилкою, оскільки мій сценарій буде run-partsспрацьовувати, але не вдасться, коли він фактично працює під користувачем cron.
ArtHare

42

Ви можете імітувати середовище користувача cron, як пояснено в "Запуск роботи cron вручну та негайно" . Це дозволить вам протестувати роботу, коли вона працюватиме як користувач cron.


Витяг із посилання:


Крок 1 : Цей рядок я тимчасово поміщаю в crontab користувача:

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

потім виймав його, як тільки файл був записаний.

Крок 2 : Зробив собі невеликий сценарій bash run-as-cron, що містить:

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

Тож я, як запитуваний користувач, зміг це зробити

run-as-cron /the/problematic/script --with arguments --and parameters

Корисна хитрість. Звичайно, це не допоможе, якщо у вас є знак відсотка у вашій команді.
базовий6
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.