
Я работаю на Arch Linux и пытаюсь создать задание cron, которое будет запускаться каждую минуту. Поэтому я использую:
$ crontab -e
И добавьте скрипт в:
* * * * * Rscript /srv/shiny-system/cron/CPU.R
~
~
"/tmp/crontab.8VZ7vq" 1 line, 47 characters
(Понятия не имею, что это за "/tmp/crontab.8VZ7vq"!)
Но это не работает - CPU.R не запускается каждую минуту. Что мне тогда делать в Arch Linux, чтобы запустить задание cron? Я посмотрел эти руководства вики ниже, но я все еще запутался:
Редактировать
Я нашел несколько подсказок отздеськасательно crond
.
[xxx@localhost ~]$ systemctl status crond
● crond.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
[xxx@localhost ~]$ sudo systemctl start crond
[sudo] password for xxx:
Failed to start crond.service: Unit crond.service failed to load: No such file or directory.
Что это значит?Гдедолжен ли я поставить этот crond.service ичтокакой сценарий мне следует туда вставить?
решение1
Здесь нетcrond.сервисна Arch Linux. Как совершенно ясно говорит Arch Wiki:
Существует множество реализаций cron, но ни одна из них не установлена по умолчанию, поскольку базовая система использует вместо этого systemd/Timers.
Следовательно, если вы хотите использовать cron, вам придетсявыбиратькакую из многочисленных реализаций вы установите, а затем запустите эту конкретную службу.
Вы не просто набираете текст наугад systemctl enable nonexistent.service
, а потом удивляетесь, почему он не работает...
Если вам нужен cronie, то установите cronie и запустите его с помощью:
pacman -Syu cronie
systemctl enable --now cronie.service
Документация Arch в целом очень понятна; если вы внимательно прочитаете страницы, на которые вы ссылаетесь, вы поймете, что вам нужно.
решение2
Если я правильно вас понял, вы имеете в виду...
Как запустить задание «cron»
...запланированные события на Arch Linux. Это довольно просто, используя systemd/Timers в качестве замены cron.
Хотя cron, пожалуй, является самым известным планировщиком заданий, альтернативой могут стать таймеры systemd.
Преимущества
Основные преимущества использования таймеров заключаются в том, что каждое задание имеет свою собственную службу systemd. Вот некоторые из этих преимуществ:
- Задания можно легко запускать независимо от их таймеров. Это упрощает отладку.
- Каждое задание можно настроить для выполнения в определенной среде (см. systemd.exec(5)).
- Задания можно прикреплять к контрольным группам.
- Задания можно настроить так, чтобы они зависели от других модулей systemd.
- Задания регистрируются в журнале systemd для удобства отладки.
...как уже упоминалосьздесь
Если вам нужно использовать cron, это все еще возможно и описаноздесь.
Чтобы сделать этот ответ полезным, вот минимальный пример дляежедневная автоматическая запланированная перезагрузкав 01:30.
1. Создайте два файла: один служебный файл и один файл таймера.Оба имени (.timer и .service) должны совпадать. Фе:
sudo vim /usr/lib/systemd/system/scheduledReboot.service
sudo vim /usr/lib/systemd/system/scheduledReboot.timer
(Папка /usr/lib/systemd/system/... — это папка по умолчанию, содержащая все файлы .service, просто к вашему сведению)
2.1 Файл schedulenReboot.service содержит:
[Unit]
Description=Scheduled Reboot
[Service]
Type=simple
ExecStart=/usr/bin/systemctl --force reboot
2.2 Файл schedulenReboot.timer содержит:
[Unit]
Description=Reboot Scheduling.
[Timer]
OnCalendar=*-*-* 01:30:00
[Install]
WantedBy=multi-user.target
- И наконец приступим к работе:
sudo systemctl start scheduledReboot.timer
sudo systemctl enable scheduledReboot.timer
- Проверьте, успешно ли создана работа:
sudo systemctl list-timers --all
и/или
sudo systemctl status scheduledReboot.timer
..который показывает что-то вроде:
Trigger: Sun 2020-05-31 01:30:00 EDT; 10h left
Мне лично очень нравится подход systemd / .service, так как я использую все свои системные задания с systemctl, например, автоматическое монтирование моих дисков nfs и т. д., и он работает очень хорошо и эффективно.
решение3
е
создайте файл с вашей задачей crone и т.д. cron.txt
cat cron.txt 0 1 * * * systemctl остановить iradio; shutdown -P 0 30 23 * * * systemctl остановить часы 34 23 * * * systemctl запустить часы
затем crontab для нового файла
кронтаб cron.txt
Кажется, теперь это работает.