LINUX.ORG.RU

Альтернатива at в линукс для запуска скрипта в определенное время.

 , ,


0

2

Есть задача иногда в определенное время запустить скрипт. Но столкнулся с проблемой. Вроде есть at для этого. Однако он не срабатывает если компьютер перевести в ждущий режим и пробудить его с помощью rtcwake за 5-10 минут до начала срабатывания.


Ответ на: комментарий от hopheynananey

anacron - он как бы только по дням работает. Да ещё и срабатывает не через нужные промежутки времени - котрые ему указали. У меня он, например, записан на работу раз в 4 дня, а срабатывает он раз в неделю. Cron - та же фигня что и at, да файл сrontab постоянно править если вдруг днем должно сработать в твое отсутствие или ночью когда спишь по необходимости. systemd.timer тот же cron только непонятней и неинтуитивней.

qwerta
() автор топика

at опирается на демон atd. Нужно копать почему он не рабоает после просыпания.

Если без разбору, то можно после пробуждения просто передернуть этот демон.

Kroz ★★★★★
()

У тебя systemd в системе есть? Если да, то попробуй systemd.timers.

Вот работающий пример запуска fstrim на 13 минуте каждого 8 часа.


# systemctl status fstrim.service

● fstrim.service - Discard unused blocks
   Loaded: loaded (/usr/lib/systemd/system/fstrim.service; static; vendor preset: disabled)
   Active: inactive (dead) since Thu 2019-11-28 08:13:37 +08; 7h ago
  Process: 2257 ExecStart=/usr/sbin/fstrim -v / (code=exited, status=0/SUCCESS)
 Main PID: 2257 (code=exited, status=0/SUCCESS)

ноя 28 08:13:33 usercomp systemd[1]: Starting Discard unused blocks...
ноя 28 08:13:37 usercomp fstrim[2257]: /: 10,6 GiB (11356475392 bytes) trimmed
ноя 28 08:13:37 usercomp systemd[1]: Started Discard unused blocks.

# cat /usr/lib/systemd/system/fstrim.service
[Unit]
Description=Discard unused blocks

[Service]
Type=oneshot
#ExecStart=/usr/sbin/fstrim -av
ExecStart=/usr/sbin/fstrim -v /

# cat /usr/lib/systemd/system/fstrim.timer
[Unit]
#Description=Discard unused blocks once a week
Description=Discard unused blocks every 8 hours
Documentation=man:fstrim

[Timer]
#OnCalendar=weekly
#OnCalendar=daily
#OnCalendar=*:00/10
OnCalendar=00/8:13
#OnCalendar=*:48
#AccuracySec=24h
Persistent=true

[Install]
WantedBy=timers.target

justAmoment ★★★★★
()
Ответ на: комментарий от qwerta

fstrim для примера работающего сервиса. По аналогии создаешь файлы для своего сервиса и прописываешь нужное расписание.

justAmoment ★★★★★
()
Ответ на: комментарий от phoen

incron это не то. У меня не происходит изменение ФС в нужное время.

Нужно именно иногда. Время может быть разное и происходит это нерегулярно. at по описанию (за исключением некоторых шероховатостей) подходит. Но траблы со срабатыванием, если комп включился за несколько минут до заданного времени. В идеале подошла бы команда типа sleep, но несколько другой логикой работы. Фактически sleep это таймер который ждет нужный промежуток времени. А мне нужен некий будильник который не дает выполнятся скрипту пока не наступит заданное время.

Например:

 $ budilnik 12:15 ; script.bash ; sleep 2m ; s2ram 

qwerta
() автор топика
Ответ на: комментарий от justAmoment

timer systemd - тот же cron. Мне не надо выполнять что-то переодически (это уже у меня настроено). Мне нужно выполнять некий скрипт с некими параметрами (различными по ситуации), иногда, время может быть разное. Это может происходить днем. может быть ночью.

qwerta
() автор топика
Последнее исправление: qwerta (всего исправлений: 1)
Ответ на: комментарий от qwerta

Нет в информатике понятия «иногда». Формализируй это и сам поймёшь как делать. Ты хочешь запускать свой скрипт с различными промежутками времени? Или его должен «триггернуть» на исполнение какой-то внешний фактор?

phoen ★★
()

Попробуй заюзать systemd.timer, может он в твоем случае лучше заработает:

systemd-run --on-active=30 --timer-property=AccuracySec=100ms /bin/touch /tmp/run-after-30-sec-delay

systemd-run --on-calendar=*:*:50 --timer-property=AccuracySec=100ms /bin/touch /tmp/run-on-calendar
alx777 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.