Вводная
Привет. Я не являюсь разработчиком и когда набросал простой скрипт для личных целей, задался вопросом: «Как запустить код не на своем компьютере?». Самые частые ответы в поисковике были про сервер и Docker. В результате забил гвоздь микроскопом. Почитать можно здесь.
Для специалистов с опытом статья наверное не имеет ценности, но новичкам надеюсь поможет сориентироваться и не потратить много часов на поиск информации и не совершать моих ошибок.
Варианты
Все ниже перечисленные способы подходят для несложного скрипта. Например, мой код для сборки статистики с группы VK, каждый час выполняет работу и завершается. Подробности тут.
Именно о запуске не сложных программ пойдет речь. Решения:
Облачное:
Yandex Functions и пр.
VPS сервер:
Python
Crontab
Systemd
Docker
Облачные решения
Простой скрипт и простое решение. Все необходимое есть и не нужно возиться с сервером.
Yandex Functions
Достаточно зарегистрироваться. Перейти в консоль, потратить время на документацию, перенести свой код и настроить таймеры. В функционал уже встроены логирование и мониторинг.
Что по деньгам? Бесплатно можно выполнять 1 000 000 раз в месяц. Что думаю более чем достаточно для небольших задач.
Существуют аналогичные заморские решения Amazon Lambda, Google Cloud Functions, Azure Functions. С учетом действующих ограничений не вижу смысла дополнительно тратить время на преодоления всех препятствий, когда результат принципиально не будет отличаться. Если есть желание разобраться оставлю ссылки на пример работы:
VPS сервер
Аренда сервера мне кажется избыточным решением для запуска одного простого скрипта. Это оправдано в случае если есть желание разобраться как взаимодействовать с сервером или в будущем будите разрабатывать более сложные проекты.
Для настройки связи вашего сервера с локальной машиной, вам нужно будет настроить SSH. Если вы часто планируете вносить изменения в код для переноса файлов рекомендую настроить Github это решение удобное и практичное.
Настройки:
SSH с 1:05:23 до 1:08:25
Github с 1:10:17 до 1:14:32
В качестве альтернативы Github можно установить себе FileZilla Client. GUI позволяет удобно перетаскивать необходимые файлы и папки. Так же можно копировать файлы используя только командную строку.
Python
Простой способ применить бесконечный цикл с задержкой времени непосредственно в скрипте. Пример на имитации часов.
import time
while True:
localtime = time.localtime()
result = time.strftime("%I:%M:%S %p", localtime)
print(result)
time.sleep(1)
Второй способ сделать то же самое используя библиотеку schedule. Эта библиотека дает возможность более гибко настроить время исполнения кода. Например, ваш скрипт должен запускаться каждую субботу в 6 часов.
import schedule
import time
def job():
localtime = time.localtime()
result = time.strftime("%I:%M:%S %p", localtime)
print(result)
schedule.every().sunday.at("06:00").do(job)
while True:
schedule.run_pending()
У зацикливания есть ощутимый минус если программа упадет, то самостоятельно в следующей период она не запуститься.
Crontab
Немного сложнее, чем цикл в самом коде. Вам придётся поработать с командой строкой и в самом файле сrontab прописать, когда и какой файл запускать. Если у вас произойдет ошибка, не связанная с вашим кодом, например, упадет внешний API сервиса к которому вы обращаетесь, то в следующий период запуска, когда API будет восстановлен ваш скрипт отработает. Минусом является очень слабое логирование, поэтому понять в каком конкретно месте падает скрипт достаточно сложно.
Systemd
Более трудозатратный способ по сравнению с crontab. Вам придётся потратить время на создание 2-х файлов. Плюсы гибкая настройка времени, условий выполнения и широкое логирование. Вы сможете увидеть ошибку с который упал код.
Docker
Избыточное решение для запуска простого скрипта, тем не менее им тоже можно воспользоваться. В первую очередь вы потратите много времени на установку docker и его настройку. Если у вас простой код, то решение с docker скорее всего не принесет дополнительной ценности кроме опыта работы.
Вывод
Надеюсь статья поможет новичкам и сэкономит их время. Оставляйте комментарии, если считаете, что существуют еще инструменты для запуска простых скриптов. Буду стараться дополнять статью опираясь на вашу обратную связь.
Комментарии (6)
Sequoza
09.08.2023 05:12Пользуясь случаем, немного пооффтоплю. Можно ли скрипты отлаживать с удаленной машины? Нет ли что-либо похожего на gdb server?
IronHead
09.08.2023 05:12PyCharm умеет удаленную отладку по ssh
4Droidek
09.08.2023 05:12Платная версия PyCharm имеет.
Бесплатно можно ssh использовать с VSCode.
А если на гуи не нужны, то можно просто через консоль + vim/nano. Не сказал бы что неудобно. Тем более vim (не vi !) имеет возможность открыть несколько сессий одновременно. Считай почти как у IDE вкладки.
NewSouth
Поэтому лучше использовать APSCheduler:
... который лишен этого недостатка + куча других плюшек по типу работы с асинхронным кодом.
На самом деле, это - самый очевидный и хороший вариант решения. Никогда не знаешь, насколько поднимут плату всякие Yandex Functions и остальные.
Статья была бы полезной, если автор хотя бы рассказал про установку библиотек и работу скрипта в виртуальной среде типа venv - это очень нужно для работы на VPS серверах. Докер для одного скрипта - действительно избыточно.
DmitriyB_33 Автор
Благодарю за комментарий. На выходных дополню статью.