Cronjob, каждые 20 минут. Начиная сразу после перезагрузки

Запуск cronjob, как

*/15 * * * * sh /home/me/skript.sh  >> /home/me/out.log 2>&1

будет выполнять skript.sh каждые 15 минут. Запуск компьютера в 12:10, я должен ждать 5 минут.

Есть ли способ запустить cronjob сразу после перезагрузки, а затем каждые 15 минут?

Спасибо, Мартин

4
задан 1 July 2018 в 01:06

1 ответ

systemd к спасению

Это не возможно с cron но systemd может сделать это. Необходимо создать две systemd единицы, та, которая запускает сценарий, и один для таймера.

файл /etc/systemd/system/my-fifteen-minutes.timer:

[Unit]
Description=15 minute timer

[Timer]
# start this 0 minutes after boot:
OnBootSec=0 min

# ... and then every 15 minutes:
OnActiveSec=15 min

[Install]
WantedBy=multi-user.target  

файл /etc/systemd/system/my-fifteen-minutes.service (отметьте другое расширение):

[Unit]
Description=My script

[Service]
Type=oneshot
ExecStart=/bin/sh -c "/home/me/skript.sh >> /home/me/out.log 2>&1"
User=me

Поместите эти файлы в каталог /etc/systemd/system и включите таймер с

# make systemd aware of them
sudo systemctl daemon-reload

# make sure the timer is engaged at startup
sudo systemctl enable my-fifteen-minutes.timer

# start the timer "now" (without rebooting):
sudo systemctl start my-fifteen-minutes.timer

# examine the status:
systemctl status my-fifteen-minutes.timer my-fifteen-minutes.service

Команда systemctl status my-fifteen-minutes.timer покажет что-то как

● my-fifteen-minutes.timer - 15 minute timer
   Loaded: loaded (/etc/systemd/system/my-fifteen-minutes.timer; enabled; vendor preset: enabled)
   Active: active (waiting) since Sun 2018-07-01 14:42:05 CEST; 1s ago
  Trigger: Sun 2018-07-01 14:57:05 CEST; 14min left

Jul 01 14:42:05 stratum9 systemd[1]: Started 15 minute timer.

Это означает: таймер был инициирован 1s ago и будет инициирован снова через ~14 минут (в "Sun 01.07.2018 14:57:05 ПОЯСА").

Обратите внимание, что таймер и сервис являются двумя разными вещами, и необходимо определить обоих. По умолчанию единица таймера запускает сервисную единицу с того же имени (за исключением расширения .timer по сравнению с. service), т.е. foo.timer управлял бы foo.service (можно переопределить это, хотя). Единица таймера просто определяет, когда что-то происходит с сервисной единицей, и сервисная единица определяет фактическое действие (в Вашем случае: запустите сценарий /home/me/skript.sh).


Дальнейшее чтение:

1
ответ дан 1 July 2018 в 01:06

Другие вопросы по тегам:

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