Запуск cronjob, как
*/15 * * * * sh /home/me/skript.sh >> /home/me/out.log 2>&1
будет выполнять skript.sh
каждые 15 минут. Запуск компьютера в 12:10, я должен ждать 5 минут.
Есть ли способ запустить cronjob сразу после перезагрузки, а затем каждые 15 минут?
Спасибо, Мартин
Это не возможно с 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
).
Дальнейшее чтение: