Мне нужно добавить задание cron через скрипт, который я запускаю для настройки сервера. Я в настоящее время использую Ubuntu. Я могу использовать, crontab -e
но это откроет редактор для редактирования текущего crontab. Я хочу сделать это программно.
Возможно ли это сделать?
Ответы:
Задания Cron обычно хранятся в пользовательском файле в
/var/spool/cron
Самое простое, что вы можете сделать, это, вероятно, просто создать текстовый файл с настроенным заданием, затем скопировать его в папку спулинга cron и убедиться, что у него есть необходимые разрешения (600).
источник
Вот одна строка, которая не использует / не требует, чтобы новая работа была в файле:
Это
2>/dev/null
важно для того, чтобы вы не получилиno crontab for username
сообщение, которое выдают некоторые * nixes, если в настоящее время нет записей crontab.источник
echo -e "$(sudo crontab -u root -l)\n* * * * * echo hello > /home/danny/temp.log 2>&1" | sudo crontab -u root -
Надеюсь, это кому-нибудь поможетДля пользовательских crontabs (включая root) вы можете сделать что-то вроде:
где файл с именем «filename» содержит элементы для добавления. Вы также можете сделать манипуляцию с текстом
sed
или другой инструмент вместоcat
. Вы должны использоватьcrontab
команду вместо прямого изменения файла.Аналогичная операция будет:
Если вы модифицируете или создаете системные crontabs, ими можно манипулировать, как обычными текстовыми файлами. Они хранятся в
/etc/cron.d
,/etc/cron.hourly
,/etc/cron.daily
,/etc/cron.weekly
,/etc/cron.monthly
каталогов и файлов/etc/crontab
и/etc/anacrontab
.источник
echo
), я получил «crontab: ошибка использования: имя файла должно быть указано для замены». Страница руководства Cron показывает синтаксис какcrontab [ -u user ] file
, то есть с обязательным именем файла. Есть ли какой-то трюк, чтобы заставить его принимать данные по каналу?stdin
. Я исправлю свой ответ.В Ubuntu и многих других дистрибутивах вы можете просто поместить файл в
/etc/cron.d
каталог, содержащий одну строку с допустимым crontab записью . Нет необходимости добавлять строку в существующий файл.Если вам нужно что-то запускать ежедневно, просто поместите файл в
/etc/cron.daily
. Кроме того, вы можете также перетаскивать файлы Into/etc/cron.hourly
,/etc/cron.monthly
и/etc/cron.weekly
.источник
Еще более простым ответом на ваш вопрос будет:
Вы можете настроить cronjobs на удаленных серверах, как показано ниже:
В Linux, местоположение по умолчанию
crontab
файла/var/spool/cron/
. Здесь вы можете найтиcrontab
файлы всех пользователей. Вам просто нужно добавить свою запись cronjob в файл соответствующего пользователя. В приведенном выше примере к файлу crontab пользователя root добавляется cronjob, который запускается/root/test.sh
каждый день в 1:00.источник
/var/spool/cron/crontabs/root
на Ubuntu.Файлы Crontab - это просто текстовые файлы, и поэтому они могут рассматриваться как любой другой текстовый файл. Цель
crontab
команды - сделать редактирование файлов crontab более безопасным. При редактировании с помощью этой команды файл проверяется на наличие ошибок и сохраняется только при его отсутствии.crontab [path to file]
может использоваться для указания crontab, хранящегося в файле. Молcrontab -e
, это будет установить файл, только если он без ошибок.Поэтому скрипт может либо напрямую записывать файлы вкладок cron, либо записывать их во временный файл и загружать их с помощью
crontab [path to temp file]
команды. Запись напрямую избавляет от необходимости записи временного файла, но также избегает проверки безопасности.источник
crontab [path to file]
... Это определенно был лучший вариант для меня, так как он позволяет более разборчивый код. Я использую crontab для отслеживания посылок и смены обоев рабочего стола на статус. Когда я не ожидаю посылки, это не нужно проверять каждый час. Вот почему я хотел, чтобы скрипт автоматически редактировал частоту cron.(У меня недостаточно репутации, чтобы комментировать, поэтому я добавляю в качестве ответа: не стесняйтесь добавлять его в качестве комментария рядом с его ответом)
Однострочник Джо Касадонте идеален, за исключением случаев, когда вы бежите с
set -e
, т. Если ваш скрипт настроен на ошибку при ошибке и если cronjobs еще нет. В этом случае однострочник НЕ будет создавать cronjob, но НЕ будет останавливать сценарий. Тихая ошибка может быть очень обманчивой.Причина в том, что
crontab -l
возвращается с1
кодом возврата, вызывая последующую команду (echo
) не выполняется ... таким образом, cronjob не создается. Но так как они выполняются как подпроцесс (из-за скобок), они не останавливают сценарий.(Интересно, что если вы снова запустите эту команду, он будет работать: как только вы не выполнили
crontab -
один раз,crontab -l
еще выводит ничего, но он не возвращает ошибку больше (вы не получитеno crontab for <user>
сообщение больше) Так что последующее.echo
Выполняется и crontab создан)В любом случае, если вы работаете с
set -e
, строка должна быть:источник
Как исправление для тех, кто предлагает
crontab -l | crontab -
: это работает не на каждой системе. Например, мне пришлось добавить задание в корневой crontab на десятках серверов со старой версией SUSE (не спрашивайте почему). Старые SUSE добавляют строки комментариев к выводуcrontab -l
, делая ихcrontab -l | crontab -
неидемпотентными (Debian распознает эту проблему в справочной странице crontab и исправил свою версию Vixie Cron, чтобы изменить поведение по умолчаниюcrontab -l
).Чтобы редактировать crontabs программно в системах, где
crontab -l
добавляются комментарии, вы можете попробовать следующее:EDITOR=cat crontab -e > old_crontab; cat old_crontab new_job | crontab -
EDITOR=cat
говорит crontab использоватьcat
в качестве редактора (не обычного по умолчанию vi), который не изменяет файл, а вместо этого копирует его в стандартный вывод. Это может все еще потерпеть неудачу, еслиcrontab -
ожидается ввод в формате, отличном от того, которыйcrontab -e
выводит. Не пытайтесь заменить финалcrontab -
наcrontab -e
- он не будет работать.источник
Ну,
/etc/crontab
просто файл ASCII, так что самое простое, чтобы простокоторый добавит работу, которая будет отправлять вам каждые 15 минут. Настройте по вкусу и проверьте с помощью
grep
или другими способами, была ли добавлена строка, чтобы сделать ваш скрипт идемпотентным.В Ubuntu и др. Вы также можете удалить файлы, в
/etc/cron.*
которых проще сделать тестирование, и, кроме того, вы не будете связываться с (системными) конфигурационными файлами, такими как/etc/crontab
.источник
crond
есть монитор, и он, безусловно, работает на заявленной платформе OP.Вот как можно изменить запись cron без непосредственного редактирования файла cron (который осуждается).
Если вы хотите удалить запись cron, используйте это:
Я понимаю, что это не то, о чем просил Гаурав, но почему бы не иметь все решения в одном месте?
источник
Я написал инструмент развертывания crontab на python: https://github.com/monklof/deploycron
Установить ваш crontab очень просто, это объединит crontab в существующий crontab системы.
источник
Это подход для постепенного добавления задания cron:
источник