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

Сначала я делал это вручную, но потом понял — подождите, я разработчик, моя работа — автоматизировать многие из этих вещей. Поэтому я погуглил, как настроить скрипт cron на моем Mac, а также как его удалить, когда закончите. Мне нужно было это каждый день в течение недели в течение какого-то времени.

Способ 1

Первый и очень простой способ — просто использовать crontab для установки cron, а когда закончите, просто удалите эту строку.

  1. Выполнить crontab -e
  2. Добавьте строку задания cron со сценарием, который вы хотите выполнить. Сохрани это.
  3. После этого удалите строку, используя тот же метод

Проблемы, с которыми я столкнулся

  • Что ж, каждый раз, когда я должен начать, я должен делать те шаги, которые подвержены ошибкам.
  • Судя по всему, если ваш скрипт что-то выводит, cron и crontab не имеют права записывать это где-то в вашем домашнем каталоге, по крайней мере, в MacOS Catalina. Вот — это сообщение о переполнении стека, которое я нашел, объясняющее это.
    Вот полная статья о том, как решить эту проблему.

Метод 2

Вот пошаговый метод, которому я пытался следовать, и в конце я опубликую ссылку на исходный код.

  • Создал два скрипта install-cron.sh и remove-cron.sh.

install-cron.sh

#write out current crontab
crontab -l > mycron
#echo new cron into cron file
echo "* * * * * sh $PWD/test.sh > $PWD/out.log 2>&1" >> mycron
#install new cron file
crontab mycron
rm mycron
  • Здесь test.sh содержит скрипт, который вы хотите выполнить.
  • $PWD/out.log 2›&1 нужен только для того, чтобы убедиться, что в файл out.tx не записывается какая-либо ошибка.

удалить-cron.txt

crontab -l > mycron
# removing the script from the file
sed -i '' '/test.sh/d' ./mycron
#install new cron file with what is left after my line is deleted
crontab mycron
rm mycron

Также вам необходимо запустить этот скрипт с помощью sudo, так как они созданы для пользователя root.

Эти простые сценарии действительно полезны, если я просто хочу настроить задания cron на своем Mac.

Вот исходный код на Github.

Также опубликовано в msrimal.blog