Перейти к содержимому

Как сделать чтобы скрипт работал постоянно

  • автор:

Как сделать скрипт, который будет непрерывно работать?

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

Как правильно сделать скрипт, который будет работать со всеми документами в папке?
Доброго времени суток. Сделал себе скрипт, который удаляет все страницы, кроме первой. Есть.

Возможно ли сделать рАкетный двигатель, который будет работать так
Возможно ли сделать Рокетный двигатель который будет работать так:Молекулы либо атомы с бешеной.

Можно ли сделать скрипт который будет запускаться в определенное время?
Можно ли сделать скрипт который будет запускаться в определенное время?И если можно то как?Задумка.

Сообщение от BarbosLV
Сообщение от lyod
Сообщение от lyod
Сообщение от BarbosLV

Та не позволяет, пробовал, минуту и прерывает.

нужно чтобы сутки скрипт непрерывано работал, типо запустился и все работает без перерыва)

Добавлено через 2 минуты

Сообщение от Seovin
Сообщение от Seovin

Сообщение от BarbosLV
Сообщение от BarbosLV

Крон тут не поможет. Свяжись с хостером, для начала. Не найдёте общего языка. Перепиши скрипт так чтобы за раз парсил по одной странице а не пачками.

Добавлено через 2 минуты

Сообщение от lyod

Сообщение от BarbosLV
Сообщение от ninja2

разбить на шаги и запускать через ajax эти шаги.

где я применял такой вариант: в базе

7 таблиц, нужно было по определеному условию пробежаться по строкам первой получить взаимосвязи, проверить их и создать новую
как сделал:
считал первую таблицу в массив и этот массив построчно через ajax отправлял в обработчик. вечером запустил к утру все было закончено

Сообщение от tgarl

Можно ещё использовать сокеты. Вот статья, прочтите: http://habrahabr.ru/post/132609/
Правда там много лишнего. Но суть поймёте.

Добавлено через 8 минут
Да и вообще, не легче ли не пожалеть 300 рублей (или сколько там) и купить VDS, где вы будете выставлять настройки по своим потребностям?

Сообщение от lyod

короче 6000 секунд выставилось, но скрипт все рамно прерывается, кюрл наверно глючит или хз. что, на денвере вроде через раз зависает, но не вылетает, а тут просто останавливается и все.

Добавлено через 3 минуты
От функция примерно которая вызывается в цикле для парса страниц из прокси

Сообщение от BarbosLV
Сообщение от Poznakomlus
Сообщение от Poznakomlus

как в консоли?
Вообще типо через крон нужно. Там типо файлы будут автоматом добавляться, читаться и по информации из файлов будет автоматом парситься и БД обновлятся.
Но оно вылетает на сервере быстрее чем на локалке, на локалке до реальной остановки доходит, а на сервере каждый раз то через секунд 10 вылетело, то через минуты 2. Мб. кюрл глючит или что то в самой библиотеке какие то ошибки и остановилось. Хотя на денвере оно не останавливается, а просто зависло и все, там же файлы записывается каждый раз, если бы оно зацыкливалось содержимое файлов менялось бы.

Добавлено через 1 минуту
на денвере через раз из 5 запусков может 1 раз подвиснуть а 4 нормально отработать, а на сервере еще не разу до останова не доходило

Асинхронность в JavaScript. setTimeout и setInterval

В JavaScript имеются методы, которые позволяют вызвать функцию не сразу, а через некоторый промежуток времени (в асинхронном режиме). Называются они setTimeout и setInterval .

Отличаются они друг от друга лишь тем, что setTimeout выполняет вызов функции всего один раз, а setInterval – постоянно через указанный интервал времени.

Синтаксис setTimeout и setInterval :

  • func – функция, которую нужно вызвать спустя указанное в delay количество миллисекунд;
  • delay – количество миллисекунд по истечении которых нужно выполнить func ;
  • arg1, arg2, . – дополнительные аргументы, которые нужно передать в func .

Например, вызовем функцию myFunc один раз по прошествии 3 секунд:

При выполнение этого кода программа не остановится на месте, где мы зарегистрировали некоторую асинхронность посредством setTimeout и не будет блокировать её дальнейшее выполнение на 3 секунды, через которые нужно будет вызвать myFunc . Выполнение скрипта продолжится дальше и сначала браузер выведет в консоль сообщение «immediately», а затем через 3 секунды – «after 3 seconds».

Другими словами, когда браузер доходит до исполнения setTimeout , он как бы помещает функцию myFunc в некоторое место, а затем по прошествии определённого количества времени её вызывает. При этом блокировка основного потока выполнения программы не происходит.

Чтобы более подробно разобраться в этом необходимо рассмотреть, как движок JavaScript выполняет синхронный и асинхронный код , а также что такое event loop и как он работает .

Синхронный и асинхронный код

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

Выполнение такого кода движок JavaScript выполняет последовательно (т.е. строчку за строчкой). При этом перед тем, как выполнить какую-то строчку кода интерпретатор сначала помещает её в стек вызовов ( call stack ). Именно в нём происходит её разбор и исполнение. После этого происходит её извлечение из стека и переход к следующей строчке.

Но всё меняется, когда интерпретатор доходит до выполнения асинхронных операций, например setTimeout . Они также как и синхронные операции сначала попадают в стек вызовов, где происходит их разбор. Но, при разборе интерпретатор понимает, что это некоторый вызов Web API и помещает эту операцию в него. После этого он удаляет эту строчку из call stack и переходит к выполнению следующей строчки кода.

В это же время Web API регистрирует эту функцию и запускает таймер. Как только он завершается, он помещает эту функцию в очередь (callback queue). Очередь – это структура данных типа FIFO. Она хранит все функции в том порядке, в котором они были туда добавлены.

Очередь обратных вызовов (callback queue) обрабатывает цикл событий (event loop). Он смотрит на эту очередь и на стек вызовов (call stack). Если стек вызовов пуст, а очередь нет – то он берёт первую функцию из очереди и закидывает её в стек вызовов, в котором она уже выполняется. Вот таким образом происходит выполнения асинхронного кода в JavaScript.

Если функцию myFunc необходимо вызывать не один раз, а постоянно через каждые 3 секунды, то тогда вместо setTimeout следует использовать setInterval :

Пример, с передачей функции аргументов:

Пример, с использованием в setTimeout анонимной функции:

В setTimeout и setInterval можно также вместо функции передавать строку с кодом, который нужно выполнить через определённый интервал времени. Но этот вариант использовать не рекомендуется по тем же причинам, что и функцию eval .

Если функция setTimeout по каким-то причинам не работает, то проверьте действительно ли вы передаёте ссылку на функцию, а неё результат:

Отмена таймаута (clearTimeout)

Метод setTimeout в результате своего вызова возвращает нам некий идентификатор таймера, который затем мы можем использовать для его отмены.

Синтаксис отмены таймаута:

Данный метод ( clearTimeout ) содержит один обязательный параметр — это уникальный идентификатор ( timeoutId ) таймера, который можно получить как результат вызова метода setTimeout .

Принцип работы с таймерами в JavaScript

Пример

Например, создадим на странице 2 ссылки. При нажатии на первую будет запускать функцию start . Данная функция будет выводить в элемент .seconds количество секунд, прошедших с момента её нажатия. При нажатии на ссылку «Остановить таймер» будем запускать другую функцию stop . Она будет прекращать работу таймера с помощью метода clearTimeout .

JavaScript - Использование методов setTimeout и clearTimeout для создания таймера

Задача. Перепишите этот пример с использованием методов setInterval и clearInterval .

Методы setInterval и clearInterval

Метод setInterval предназначен для вызова кода на языке JavaScript через указанные промежутки времени. Он в отличие от метода setTimeOut будет вызвать код до тех пор, пока Вы не остановите этот таймер.

Метод setInterval имеет два обязательных параметра:

  • 1 параметр представляет собой строку, содержащую код на языке JavaScript (например, вызов функции);
  • 2 параметр задаёт интервал времени в миллисекундах, через который данный код будет вызываться.

Для прекращения работы данного таймера предназначен метод clearInterval , которому в качестве параметра необходимо передать уникальный идентификатор ( id ) таймера. Этот идентификатор можно получить при установке таймера, т.е. его возвращает метод setInterval . Также таймер прекращает свою работу при закрытии окна.

Запускаем Python-скрипт на сервере, чтобы он работал всё время

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

Сейчас нам нужно такое решение, чтобы бот автоматически перезапускался при любых обстоятельствах. Этим и займёмся.

Коротко — суть

Чтобы было понятно, что тут происходит, вот короткая версия:

  1. Настраиваем удалённый доступ к серверу.
  2. Создаём папку и заливаем в неё скрипт, который в итоге должен будет работать всё время.
  3. Создаём у себя на компьютере файл службы — он управляет настройками автозапуска скрипта.
  4. Отправляем файл службы на сервер.
  5. Обновляем на сервере данные обо всех службах и запускаем нашу.

Теперь подробно про каждый шаг.

Предварительная работа

Основное, что мы будем использовать, — это удалённый доступ к серверу по SSH. Для этого он должен быть включён на самом сервере, и там же можно сразу посмотреть параметры доступа. Например, для работы нашего учебного сервера мы пользуемся услугами SpaceWeb, где доступ по SSH включается из панели управления:

Запускаем Python-скрипт на сервере, чтобы он работал всё время

Запускаем SSH и проверяем, что соединение устанавливается. Чтобы соединиться, нужно написать в терминале команду ssh имя_пользователя@адрес_сервера, после чего нажать Enter. Сервер спросит пароль, и, если мы его правильно ввели, нас пустят.

Запускаем Python-скрипт на сервере, чтобы он работал всё время

Мы видим приветствие сервера, значит, всё прошло хорошо и мы можем управлять им со своего компьютера. Для этого нужно будет писать в терминал команды и реагировать на то, что тебе ответит сервер.

Отправляем скрипт на сервер

Чтобы не захламлять корневую папку на сервере, создадим новую папку bot. Вот эта команда:

После этого открываем новую командную строку на компьютере, а не на сервере. Для этого нужно запустить ещё одно окно терминала. Там пишем такое:

scp /Users/mihailpolanin/Downloads/bot.py mpolyanin@77.222.61.9:bot

Вот что это означает:

  • scp — копирование файла по SSH;
  • /Users/mihailpolanin/Downloads/bot.py — это путь к нашему скрипту на компьютере. Его замените на то, что будет у вас;
  • mpolyanin@77.222.61.9 — адрес сервера и логин пользователя. Это тоже замените на ваши данные;
  • : — отделяет сервер от папки;
  • bot — название папки, которую мы только что создали на сервере.

Лайфхак: чтобы не писать вручную пути до файлов на локальном компьютере, можно перед началом ввода пути просто перетащить файл в окно терминала. Терминал поймёт, что вы имели в виду «путь до этого файла», и подставит данные сам.

После запуска у нас попросят пароль от сервера — вводим его и видим статистику отправки файла:

Запускаем Python-скрипт на сервере, чтобы он работал всё время

Переключаемся обратно в SSH-соединение и проверяем, что файл скопировался и лежит в папке. Для этого вводим две команды: первая перейдёт в эту папку, а вторая покажет её содержимое:

Запускаем Python-скрипт на сервере, чтобы он работал всё времяВнутри нашей папки появился скрипт с ботом, значит, мы всё сделали правильно

Готовим файл для работы службы

Нам нужно, чтобы система сама следила за тем, чтобы скрипт работал всё время и запускался после перезагрузки. В Linux за это отвечают службы — одну из таких служб мы сейчас и сделаем.

Создаём на компьютере новый файл bot.service и вставляем туда такое:

Два самых важных параметра — это путь к нашему скрипту (/bot/bot.py) и название службы: tg-bot. Название может быть любым, а вот путь к скрипту нужно указать точно.

Теперь закидываем этот файл на сервер в папку /usr/lib/systemd/system. Для этого в командной строке компьютера пишем:

scp /Users/mihailpolanin/Downloads/bot.service mpolyanin@77.222.61.9:/usr/lib/systemd/system

Как и раньше, не забудьте заменить адрес до файла .service на вашем компьютере, а также имя пользователя и адрес сервера. Первый адрес можно не писать вручную, а перетащить файл в терминал сразу после набора команды scp.

Запуск службы

Теперь нам нужно перезагрузить все службы, чтобы наш файл тоже попал в общий список для запуска. Открываем SSH-консоль и выполняем там такую команду:

sudo systemctl daemon-reload

И сразу включим наш сервис, чтобы он не отключался при перезагрузке сервера:

sudo systemctl enable bot.service

Всё, можно запускать наш телеграм-бот как службу. Вот основные команды для этого:

  • sudo systemctl start bot.service — запустить службу;
  • sudo systemctl stop bot.service — остановить службу;
  • sudo systemctl status bot.service — посмотреть статус, работает или нет.

Что дальше

В следующий раз сделаем ещё круче — настроим систему мониторинга на сервере, чтобы нам на почту приходило сообщение, когда служба перезапускается или останавливается с ошибкой. Подпишитесь, чтобы не пропустить.

Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём!

Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию

Вчера мы показали на сайте простую игрульку — тест по выбору языка программирования.

Добавляем вопросы на страницу прямо во время теста

Раскладываем по полочкам новую профессию.

Что такое генераторы в программировании

Они лениво раз за разом вычисляют новые значения, но не помнят, что было до этого.

Как сделать чтобы скрипт работал постоянно при нажатии?

Как сделать чтобы чтобы работало постоянно и не надо было перезагружать страницу, например если я нажал 100 раз на кнопку, то надо чтобы скрипт тоже сработал 100 раз?

Никита Краснобаев's user avatar

eustatos's user avatar

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.8.2.43557

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

From $34/Day — Car Rental HPN With Zero Terminal Shuttle