Задать вопрос
@lex63
Начинающий web-разработчик

Как передать задачу в cron из скрипта?

Здравствуйте!
Задача такая. Есть определенный скрипт.
Одной из его задач является добавление в cron задания
Перед написанием этой строки решил потестить и выявил следующее.
Если задачу в cron добавить таким образом, то затираются предыдущие, что в принципе и логично, но задача выполняется по указанному промежутку (каждую минуту):
echo "* * * * * rm -rf /home/user/testfolder" | crontab

Если же добавлять таким образом, то задача добавляется в конец файла с задачами, но... не выполняется вообще:
echo "* * * * * rm -rf /home/user/testfolder" >> /var/spool/cron/crontab/root

Подскажите, где я делаю не так?
Во втором варианте после добавления пробовал перезапустить cron, но не работает(
  • Вопрос задан
  • 3312 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
crontab -l > foocron
echo "* * * * * rm -rf /home/user/testfolder" >> foocron
crontab foocron
rm foocron

Этот функционал специально для таких задач и был сделан, не нужно скриптами ковырять дефолтные файлы, плохая это идея.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
martin74ua
@martin74ua Куратор тега Linux
Linux administrator
Никогда не задумывались, почему в документации сказано - не правьте напрямую юзерские файлы кронтаба?
Подскажу - если за /etc/crontab демон следит постоянно и при его изменении перечитывает, то за юзерскими файлами никто не следит. И команду на их перечитывание дает та самая команда crontab -e
А Ivan Yakushenko вам уже правильный вариант дал.

Еще есть /etc/cron.d/ каталог. Любой файл, добавленный туда - рассматривается как дополнительное расписание. Это было сделано специально под пакетные менеджеры, чтобы не править единственный /etc/crontab при установке\добавлении пакетов...
Ответ написан
Комментировать
smorman
@smorman
When In Rome do as The Romans do...
Если ты так добавляешь задание и при этом до этого момента ни разу и никогда задание в cron не добавлялось, то файлик этот будет просто с оной записью, но без атрибутов и он не выполняется в последствии планировщиком. Т.е. файл мёртвый!

Правильно надо так:
sudo echo -e '* * * * * rm -rf /home/user/testfolder' | sudo crontab -


Почему с sudo?
Таким образом задание пишется в /var/spool/cron/crontabs/root
А если без sudo, то в /var/spool/cron/crontabs/твоё_имя_пользователя_в_системе

А если уже добавлялось, или, вручную, через редактор командой sudo crontab -e, или, как выше я описываю, то после первого такого добавления уже можно добавлять задание командой правильно так:
sudo sh -c "echo '* * * * * rm -rf /home/user/testfolder' >> /var/spool/cron/crontab/root"


Но в этом случае обязательно перезагрузить планировщик командной:
sudo /etc/init.d/cron restart
Иначе задание не будет работать...

Или добавляй всё руками через редактор:
sudo crontab -e
Сохраняешь, выходишь и всё сразу готово к употреблению!
Ответ написан
Комментировать
shabelski89
@shabelski89
engineer
используйте sed для редактирования.
например замена 3ей строки в файле crontab:
sed -i "3c\* * * * * rm -rf /home/user/testfolder" /var/spool/cron/crontabs/root
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы