Unix, как поместить crontab в скрипт оболочки - PullRequest
1 голос
/ 14 ноября 2010

Я новичок в Unix и не знаю, как использовать crontab.Я хочу написать программу, которая будет обновлять файл каждую полночь.0 0 * * * (полночь каждый день).Я хочу, чтобы пользователь вводил значение для in_variable (пожалуйста, посмотрите на следующий код) только при первом запуске программы, а остальное выполняйте каждую полночь (не предлагая пользователю вводить значения больше после самого первого раза).в зависимости от старого ввода (in_variable) программа должна выполнять оператор if else каждую полночь.Пожалуйста, дайте мне знать, если это возможно?любая помощь будет принята с благодарностью.

echo "which message would you like to output: "
read in_variable
0 0 * * * 
if [ $in_variable -eq "1" ]; then
   echo "output message 1" >> file1
else
   echo "output message 2" >> file2
fi

Ответы [ 4 ]

3 голосов
/ 14 ноября 2010

Задания Cron выполняются автоматически и не могут зависеть от какого-либо взаимодействия с человеком.

Ваш сценарий должен прочитать свой первоначальный ввод из файла, или его инициализация должна выполняться с помощью интерактивного сценария (а не из cron).

Также обратите внимание, что вы указываете не расписание в сценарии оболочки, а в самом crontab.То есть ваш вопрос задом наперед .Вы должны спросить , как поместить shell-скрипт в crontab ?Ответ на который по существу:

См. man cron.(Связанный ресурс предназначен для BSD, ваша реализация cron может отличаться).

2 голосов
/ 14 ноября 2010

Создайте скрипт для запроса, какое сообщение использовать отдельно от задания cron, поместив сообщение в файл под /var/lib. Выполните проверку задания cron на наличие файла, а затем обработайте добавление содержимого, если оно есть.

1 голос
/ 14 ноября 2010

crontab не работает так.Вы не указываете время в программе, которую хотите запустить;Вы помещаете спецификацию времени в файл crontab где-то (где это зависит от системы), который указывает и , когда для запуска программы, и какую программу или команду для запуска.

Игнасио имеет право в отношении того, что делать с переменной: сохраняйте переменную в файле в фиксированном месте, затем ваш скрипт проверяет наличие файла.Крон не будет иметь ничего общего с этой частью.

0 голосов
/ 14 ноября 2010

Быстрый уродливый хак (подробнее о том, почему это хак после) будет выглядеть так:

echo "which message would you like to output: "
read in_variable

if [ $in_variable -eq "1" ]; then
   echo '0 0 * * * echo "output message 1" >> file1' | crontab -
else
   echo '0 0 * * * echo "output message 2" >> file2' | crontab -
fi

Это уродливо, потому что полностью стирает текущий crontab.Более сложный ответ предоставит своего рода «тег» для новой строки, добавляемой в crontab, и перезапишет старую строку, если кто-то запустит скрипт во второй раз.Это также обеспечило бы механизм удаления строки, сохраняя при этом существующую таблицу cron.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...