Как периодически выполнять сценарий, не используя crontab?

Как выполниться, сценарий периодически как crontab делает, но не используя crontab?

Отметьте это, которое выполняемый сценарий не должен запускать с другим сценарием и планировать его с командой 'сна', что я ожидаю иметь ту же функциональность как crontab, но он не должен присутствовать в списке crontab и не должен быть остановкой когда терминал или законченная сессия,

crontab точно, но не гранулируя его.

3
задан 2 November 2016 в 14:40

2 ответа

Современная опция состоит в том, чтобы использовать a systemd единица таймера. Это требует создания a systemd единица, которая определяет задание, которое Вы хотите периодически выполнить, и a systemd.timer единица, определяющая расписание для задания.

Принятие Вас хочет выполнить задание как обычного пользователя, вставить эти файлы $HOME/.config/systemd/user:

мой-job.service

[Unit]
Description=Job that needs periodic execution

[Service]
ExecStart=/path/to/your/script

мой-job.timer

[Unit]
Description=Timer that periodically triggers my-job.service

[Timer]
OnCalendar=minutely

Затем включите недавно созданные единицы и запустите таймер:

$ systemctl --user enable my-job.service my-job.timer
$ systemctl --user start my-job.timer

Чтобы проверить, что таймер установлен:

$ systemctl --user list-timers
NEXT                         LEFT     LAST                         PASSED UNIT         ACTIVATES
Wed 2016-11-02 14:07:00 EAT  19s left Wed 2016-11-02 14:06:37 EAT  3s ago my-job.timer my-job.service

journalctl -xe должен показать записи в журнале выполняемого задания.

Обратитесь к man systemd.timer для многих опций для конфигурирования поведения таймера (включая рандомизированный запуск, пробуждение компьютера, персистентности через время простоя, точность таймера, и т.д.), и к man systemd.unit для превосходной документации относительно systemd и systemd единицы в целом.

5
ответ дан 1 December 2019 в 13:24

Вы можете запустить скрипт с at и сделать так, чтобы он перепланировал себя в качестве последней инструкции. Например, например:

$ cat > $HOME/my.job <<END
do this
do that
cat "$HOME/my.job" | at now + 5 minutes
END
$ sh ~/my.job

Чтобы остановить задание, удалите его из очереди at:

$ atq
5       Wed Nov  2 11:25:00 2016 a zwets
$ atrm 5

Или просто удалите файл my.job, чтобы при следующем выполнении cat "$HOME/my.job" выдаст ошибку, поэтому at не будет вызвано, и перепланирование не произойдет.

2
ответ дан 1 December 2019 в 13:24

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

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