Как выполниться, сценарий периодически как crontab делает, но не используя crontab?
Отметьте это, которое выполняемый сценарий не должен запускать с другим сценарием и планировать его с командой 'сна', что я ожидаю иметь ту же функциональность как crontab, но он не должен присутствовать в списке crontab и не должен быть остановкой когда терминал или законченная сессия,
crontab точно, но не гранулируя его.
Современная опция состоит в том, чтобы использовать 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
единицы в целом.
Вы можете запустить скрипт с 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
не будет вызвано, и перепланирование не произойдет.