Я пытаюсь обновить crontab из файла GNU Make.
Идея такова: я просматриваю существующую таблицу cron и отфильтровываю все записи, помеченные как мои (через комментарий), и сохраняю их во временном файле. Затем я добавляю свои задания в этот временный файл и делаю его новой таблицей cron. Таким образом, make-файл может быть запущен несколько раз без ущерба для работы других людей.
Это соответствующая часть файла make:
crontab.tmp: $(CRON_FILES)
@echo -n "Generating new cron table combining existing one with a new one ..."
if $$(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > $@
@cat $(CRON_FILES) | awk '{print $$0, " ## MAX-CRON-JOB"}' >> $@
@echo "OK"
.PHONY: cronjobs
cronjobs: crontab.tmp
@echo -n "Installing cron commands... "
@crontab $<
@echo "OK"
Беспокойная часть этой строки:
if $$(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > $@
Когда таблица cron пуста, она как-то ломает make, в то время как соответствующая сгенерированная команда bash:
if $(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > crontab.tmp
Работает нормально из командной строки.
Вот ошибка от make (ничего особенного, если вы спросите меня ...):
Generating new cron table combining existing one with a new one ...if $(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > crontab.tmp
make: *** [crontab.tmp] Error 1
Что мне здесь не хватает?