Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Запуск скрипта по таймеру systemd  (Прочитано 1356 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн eNdiD

  • Автор темы
  • Участник
  • *
  • Сообщений: 188
    • Просмотр профиля
Знает ли кто-то пример запуска скрипта по тамеру systemd?

Ищу адекватную замену cron. Т.к. cron не подходит из-за жесткой привязки к времени. Если машина была выключена - задача не выполняется. А мне нужно выполнение скрипта каждый день. Anacron тоже не подходит из-за крайне странной работы. Он может неделю нормально работать, а потом несколько дней подряд не выполнять скрипт по неизвестной причине.

В общем, нужно что-то постабильнее. Наткнулся на systemd таймеры, но с ними сложнее. В общем, пока разбираюсь. Буду благодарен, если кто-то с ними работал и может подсказать.

Важная деталь: скрипт должен быть запущен с привилегиями обычного пользователя.

Грубо говоря, требуется:
Выполнение скрипта ежедневно, но конкретное время не принципиально
Запуск с привилегиями локального пользователя
Гарантированное выполнение, без пропусков

Оффлайн Haron Prime

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 11313
  • Arch Linux & XMonad
    • Просмотр профиля
Re: Запуск скрипта по таймеру systemd
« Ответ #1 : 21 Май 2017, 19:29:02 »
Это уже читали?

Пользователь добавил сообщение 21 Май 2017, 19:30:03:
Цитировать
OnCalendar=
Defines realtime (i.e. wallclock) timers with calendar event expressions.

Пользователь добавил сообщение 21 Май 2017, 19:32:24:
Цитировать
Монотонный таймер
Таймер, который запустится через 15 минут после загрузки, а затем снова будет запускаться каждую неделю во время работы системы.
/etc/systemd/system/foo.timer
[Unit]
Description=Run foo weekly and on boot

[Timer]
OnBootSec=15min
OnUnitActiveSec=1w

[Install]
WantedBy=timers.target
https://wiki.archlinux.org/index.php/Systemd/Timers_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)

Пользователь добавил сообщение 21 Май 2017, 19:33:26:
Цитировать
Таймер в реальном времени
Таймер, который будет запускаться один раз в неделю (в 12:00 в понедельник). Он принудительно запустится единожды, если отсутствует последнее время запуска (опция Persistent=true), например, в связи с отключением системы:
/etc/systemd/system/foo.timer
[Unit]
Description=Run foo weekly

[Timer]
OnCalendar=weekly
Persistent=true     
 
[Install]
WantedBy=timers.target

Пользователь добавил сообщение 21 Май 2017, 19:35:14:
https://www.hippolab.ru/systemdtimer-zapusk-zadach-po-raspisaniyu
« Последнее редактирование: 21 Май 2017, 19:35:14 от Haron Prime »
sudo ls -a | grep brain > /dev/head

Оффлайн eNdiD

  • Автор темы
  • Участник
  • *
  • Сообщений: 188
    • Просмотр профиля
Re: Запуск скрипта по таймеру systemd
« Ответ #2 : 21 Май 2017, 19:36:52 »
Haron Prime, да, разбираюсь, спасибо. И ещё на арчвики нашел. Завтра попробую сделать. Если кто-то реализовывал подобное - пример бы помог.

Ещё раз спасибо, буду пробовать

Оффлайн Haron Prime

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 11313
  • Arch Linux & XMonad
    • Просмотр профиля
Re: Запуск скрипта по таймеру systemd
« Ответ #3 : 21 Май 2017, 19:37:29 »
А вообще информации по этому вопросу масса
Я в своё время перевёл все свои задачи из крона в таймеры systemd - проблем не наблюдаю.

Пользователь добавил сообщение 21 Май 2017, 19:42:05:
Если кто-то реализовывал подобное - пример бы помог.
я ж привёл два примера из арчвики
вот тут
[Unit]
Description=Run foo weekly

[Timer]
OnCalendar=weekly
Persistent=true     
 
[Install]
WantedBy=timers.target
изменить weekly на daily и будет срабатывать ежедневно

Пользователь добавил сообщение 21 Май 2017, 19:43:55:
в статье по последней ссылке, которую я дал, подробно и с примерами описано как задавать частоту исполнеyия

Пользователь добавил сообщение 21 Май 2017, 19:46:27:
[Unit]
Description=Run foo daily

[Timer]
OnBootSec=10min
OnCalendar=daily
Persistent=true     
 
[Install]
WantedBy=timers.target
вот этот таймер по идее должен срабатывать ежедневно через 10 минут после старта компа

как вариант вместо
OnCalendar=daily
Persistent=true
прописать
OnUnitActiveSec=1dполучаем тот же эффект - ежедневно через 10 минут после старта компа
« Последнее редактирование: 21 Май 2017, 19:52:50 от Haron Prime »
sudo ls -a | grep brain > /dev/head

Онлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27414
    • Просмотр профиля
Re: Запуск скрипта по таймеру systemd
« Ответ #4 : 21 Май 2017, 22:03:40 »
man anacron
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн eNdiD

  • Автор темы
  • Участник
  • *
  • Сообщений: 188
    • Просмотр профиля
Re: Запуск скрипта по таймеру systemd
« Ответ #5 : 21 Май 2017, 23:11:39 »
AnrDaemon, гениально

Онлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27414
    • Просмотр профиля
Re: Запуск скрипта по таймеру systemd
« Ответ #6 : 22 Май 2017, 00:45:24 »
Я то тут при чём? Ubuntu использует anacron с 9 или 10 версии по умолчанию.
На десктопах точно.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн eNdiD

  • Автор темы
  • Участник
  • *
  • Сообщений: 188
    • Просмотр профиля
Re: Запуск скрипта по таймеру systemd
« Ответ #7 : 22 Май 2017, 01:12:04 »
AnrDaemon, и это замечательно. Но проблема в том, что он работает не очень стабильно. Я запускаю анакрон со своим списком и со спулом локального пользователя. Как итог: он регулярно пропускает выполнение задачи. В логах вижу, что он пытается запустить задачу, но прерывает ее выполнение. И затем просто пропускает ее целый день. И на следующий день все может быть точно так же. При этом, в спуле четко висит последняя дата выполнения. Я не думаю, что могла произойти какая-то магия, и скрипт магическим образом перестал работать, или испортились права. А потом таким же магическим образом все начало работать снова. Ман анакрона и анакронтаб я перелопатил в первую очередь, и все вроде верно. Вот и пойди пойми, что там не так. Да и как-то разбираться с ним больше не охота.

Онлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27414
    • Просмотр профиля
Re: Запуск скрипта по таймеру systemd
« Ответ #8 : 22 Май 2017, 07:34:26 »
Так надо разобраться, почему прерывает.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн eNdiD

  • Автор темы
  • Участник
  • *
  • Сообщений: 188
    • Просмотр профиля
Re: Запуск скрипта по таймеру systemd
« Ответ #9 : 23 Май 2017, 10:41:48 »
Haron Prime, еще раз спасибо. Все оказалось довольно просто. Работает отлично

 

Страница сгенерирована за 0.189 секунд. Запросов: 24.