Запуск сервера с LUA и мне нужно запускать функцию в определенное время каждый день - PullRequest
0 голосов
/ 26 февраля 2019

Итак, я запускаю скрипт LUA, который выполняется каждую минуту, это контролируется программным обеспечением, и я не могу контролировать время выполнения.Я хотел бы проверять время каждый день и запускать функцию в определенное время.Однако я хотел бы выполнить другой сценарий за 5 минут до того, как это произойдет.

Сейчас я делаю сравнение строк с помощью os.date () и анализирую его в строку.Это работает, но код не симпатичен, и если время меняется, мне нужно вручную изменить время в двух разных переменных, я довольно плохо знаком с LUA, поэтому у меня возникли трудности с поиском лучшего способа сделать это.

Итак, вопрос в том, как установить переменную времени и сравнить ее с os.date (или os.time)?

1 Ответ

0 голосов
/ 01 марта 2019

Не существует причудливого способа сделать таймеры в чистом Луа.Чтобы избежать строк os.date (), вы можете создать временные метки с предварительно установленными датами, os.time принимает таблицу значений ключей для установки даты :

timestamp = os.time({year=2019, month=1, day=n})

Итеративно увеличивая переменную n, вы будете получать отметку времени для каждого нового n дня после 1 января 2019 года. Например,

os.date("%Y-%m-%d %H-%M-%S",os.time({year=2019,month=1,day=900})
--> 2021-06-18 12-00-00

Если вы не можете сохранить переменную дня, чтобы отслеживать (между перезапусками приложения), получите текущий «сегодняшний» день и выполните итерации оттуда:

os.date("%Y-%m-%d %H-%M-%S",
    os.time({year=os.date("%Y"),month=os.date("%m"),day=os.date("%d")+n}
)

Использование os.date с пользовательским форматом и os.time делает ваш код независимым от текущей установленной даты locale .


После того, как вы определили метку времени первого задания, сместите второе фактическое задание на пять минут secondTaskTimestamp = fistTaskTimestamp + 5*60 (или снова используйте os.time).Ваш таймер должен сравнивать только отметки времени.

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

Связанный: Как выполнить глобальную функцию в определенный день в определенное время в Lua?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...