Как запустить python скрипт на Linux в виде demon
Admin
16.10.2022
Linux, Python
Описание процесса от создания БД и до запуска скрипта.
Соединяемся со своим сервером и дальше работаем через консоль.
Переносим локальный проект на сервер
Создаем директорию для нашего нового приложения:
cd /home/ploshadka/new-application
mkdir new-application
Клонируем свой git-проект на наш сервер:
git clone «git@github.com:nikname/name_repository.git» ./
Создаем виртуальное окружение python:
python3 -m venv venv
source venv/bin/activate
pip install —upgrade pip
pip install -r requirements.txt
Создаем БД в PostgreSQL
Подключаемся к PostgreSQL:
sudo su — postgres
CREATE DATABASE new-application TEMPLATE=template0 ENCODING ‘UTF-8’ LC_COLLATE ‘ru_RU.UTF-8’ LC_CTYPE ‘ru_RU.UTF-8’;
Назначаем привелегии новой таблице:
GRANT ALL PRIVILEGES ON DATABASE new-application TO ploshadka;
pg_restore -U ploshadka -d new-application /home/ploshadka/new-application/bd.tar
Выходим из postgres окружения:
В коде должно быть подключение к PostreSQL
Выдержка из примера подключения к PostreSQL вместе с логированием.
def create_connection (
db_name = ‘new-application’ ,
db_user = ‘ploshadka’ ,
db_password = ‘12345’ ,
db_host = ‘localhost’ ,
db_port = 5432
) :
connection = None
try :
connection = psycopg2. connect (
database = db_name ,
user = db_user ,
password = db_password ,
host = db_host ,
port = db_port ,
)
connection. autocommit = True
except psycopg2. OperationalError as error:
logger. info ( f ‘Ошибка: ‘ )
return connection
Создаем демон для запуска нашего скрипта на python
sudo nano /etc/systemd/system/new-application.service
Внутри этого файла вставляем:
Description=New Application
After=network.target
[Service]
User=ploshadka
Group=www-data
WorkingDirectory=/home/ploshadka/new-application
Environment=»PATH=/home/ploshadka/new-application/venv/bin»
ExecStart=/home/ploshadka/new-application/venv/bin/python bot.py —start
ExecStop=/home/ploshadka/new-application/venv/bin/python bot.py —stop
ExecReload=/home/ploshadka/new-application/venv/bin/python bot.py —restart
TimeoutSec=30
Restart=always
Команды для запуска, остановки, перезагрузки службы
sudo systemctl start new-application
sudo systemctl stop new-application
sudo systemctl start new-application
sudo systemctl reload new-application
Узнать статус работы:
sudo systemctl status new-application
Читайте также
У сайта нет цели самоокупаться, поэтому на сайте нет рекламы. Но если вам пригодилась информация, можете лайкнуть страницу, оставить комментарий или отправить мне подарок на чашечку кофе.
Как запускать скрипты python в linux

Я, как настоящий старовер, решил построить «data-pipeline» без коннекторов и DAG-менеджеров. Положив два перста на мышку, началась упорная работа. Разобрался с API рекламных систем, установил драйвер bigquery, залил первую таблицу в датасет. Победа была близка, осталось всё автоматизировать. Я начал разворачивать Airflow, а потом проснулся и вспомнил про cron.
Вспомнив про ранее купленный на лучшемгосподихостинге бегете VPS, куда я деплоил свой tf-idf кластеризатор. Было решено залить скрипт на сервер и настроить его запуск на 6 утра ежедневно.
Cron — это демон, а демон — это программа работающая в фоновом режиме. Ну а если вы программировали на Python — вам должны быть знакомы процессы-демоны. Запуск Cron-задания — это легко, но только в случаях когда мы говорим об выполнении php и bash скриптов. С Python всё иначе.
Устанавливаем Python на сервер
Выполняем, указные команды на примере Ubuntu.
sudo apt update sudo apt install python3.8 sudo apt install -y python3-pip
Проверяем успешность установки командой python3.
Создаем виртуальное окружение virtalenv
Следующий шаг — изолировать наш проект в отдельное виртуальное окружение, куда мы будем устанавливать нужные нам библиотеки.
pip3 install virtualenv # устанавливаем библиотеку cd /home/iakulshin # идем в папку вашего пользователя, тут на ваше усмотрение mkdir pipeline # создаем папку проекта cd /pipeline # переходим в папку virtualenv -p python3 venv # создаем виртуальное окружение, важно что мы устаналиваем с параметром -p, а то получим python 2.7 source venv/bin/activate # активируем
Теперь мы видим рядом в консоли перед строкой приписку (venv) — это значит, что мы в виртуальном окружении.

Запуск Python-скрипта с помощью Сron
Давай потестируем то, что у нас получилось на маленьком скрипте, который будет писать в файл дату и время его активации. Таким образом мы проверим как работает cron. Тестовый скрипт, который мы положим в корень папки проекта, у меня это / home / iakulshin / pipeline, заливаем через файловый менеджер filezilla и прочие, если вы хардкорный девопс-дата-инженер удачи вам с nano. Заливаем скрипт указанный ниже в нашу папку.
from datetime import datetime with open('test.txt', 'a+', encoding='utf-8') as file: file.write(datetime.today().strftime('%Y-%m-%d-%H-%M-%S') + '\n')
Давайте попробуем создать cron задание для тестового запуска. В целом нам будут нужны 2 команды:
crontab -l # выводит список текущих заданий crontab -e # открывает файл заданий crontab -r # удаляет файл задания Пишем в консоль crontab -e
Появлеятся файлик с крон задачами в редакторе nano. Наша задача установить задание, которое будет запускать наш скрипт каждую минуту.
* * * * * cd /home/iakulshin/pipeline && /home/iakulshin/pipeline/venv/bin/python3 test.py [минута] [час] [день] [месяц] [день недели] [Переходим в папку] [&& - означает "и"] [с помощью интерпретатора python3 запускаем файл test.py]
Наконец, в файлике test.txt каждую минуту появляется текущая дата, учения завершены, теперь рассмотрим возможные проблемы и способы их устранения.
Как понять что Cron срабатывает?
Чтобы удостовериться, что cron-таск отрабатывает, нам необходимо добавить задачу и обратиться к логам сервера, для этого идем в консоль и пишем следующую команду:
tail /var/log/syslog # получаем "хвост", последние 10 строк лог-файла

В нем вы увидите следующие записи:
Это означает, что cron срабатывает и воспроизводит команду, которую вы указали после звездочек. Но что делать, если python-скрипт всё еще не работает?
Cron срабатывает но Python-скрипт не выполняется
Самая типичная проблема, которая связана с «холостым» крон-таском — это недоступность библиотек, неверный выбор virtual env и версии python. Способ выбранный выше — это способ к которому я пришел спустя десяток часов поисков и изучения stackoverflow. Что нужно проверить для успешного запуска скрипта:
Возьмите команду, которую собирались добавь в крон и запустите её, это поможет словить ошибки связанные с недоступностью библиотек. В моем случае Скрипт не видел импортируемый файл, это я вылечил добавлением папки в системный путь. Добавляем в скрипты следующий код:
#!/home/iakulshin/bq_uploader/venv/bin/python import sys sys.path.insert(1, '/home/iakulshin/bq_uploader/') # Путь до вашей папки со скриптом
Если скрипт запускается по прямой команде из консоли, но cron всё еще не выполняется, то ошибка 100% в том, что ваш скрипт запускается не из под virtualenv или вы запускаете скрипт из под python не подходящей версии, поэтому проверяем следующее:
- Мы перешли в папку со скриптом командой cd
- Мы обратились к интерпретатору python3 находящемуся в папке с виртуальным окружением нашего проекта.
В целом данный гайд должен помочь вам разобраться с запуском Python скриптов с помощью Cron. Однако, я оставлю ссылки на полезные треды в stackoverflow, где представлены дополнительные способы решения этой проблемы.
Как запустить python скрипт и закрыть терминал?
Я загрузил файлы python на vps, и запустил их через терминал. При закрытии терминала процесс прерывается. Как сделать так, чтобы я мог отключиться от сервера, но скрипт работал?
- Вопрос задан 11 дек. 2022
- 554 просмотра
Комментировать
Решения вопроса 1

Ответ написан 11 дек. 2022
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 1
Чтобы запустить python скрипт и закрыть терминал, необходимо использовать команду nohup. Эта команда запускает скрипт в фоновом режиме, так что он будет работать, даже если терминал будет закрыт. Чтобы запустить скрипт с помощью nohup, вы можете использовать следующую команду:
nohup python myscript.py &
Здесь myscript.py — это имя вашего python скрипта. После запуска скрипта с помощью nohup, вы можете закрыть терминал и отключиться от сервера, не останавливая работу скрипта.
Ответ написан 11 дек. 2022
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
- +1 ещё
Как убрать мерцание консоли при использовании os.system(‘cls’)?
- 3 подписчика
- 16 нояб.
- 196 просмотров
Запуск скрипта python на Линукс
Как запустить скрипт python. В Линукс если он там не установлен, можно ил как с крипт вместе с Питом запускать?По типу как это собирается для windows.
Отслеживать
19.6k 6 6 золотых знаков 22 22 серебряных знака 56 56 бронзовых знаков
задан 10 фев 2021 в 13:40
Иван Минин Иван Минин
39 1 1 серебряный знак 5 5 бронзовых знаков
если в линуксе не установлен python, то это какой то очень странный линукс. В Федора/CentOS на питоне построенн менеджер пакетов, так что там без него ну совсем никак. Если же так оказалось, что его нет, то легче установить через пакетный менеджер, чем использовать какие то третьесортные утилиты.
10 фев 2021 в 15:08
Вопрос крайне не понятен. Что значит «по типу, как собирается для windows»? Python интерпретируемый язык. Программы на нём не компилируется и не собираются как на Windows, так и на Linux — они интерпретируются имеющимся интерпретатором Python. В любом хоть сколь-нибудь распространённом дистрибутиве Linux интерпретатор устанавливается по-умолчанию, и в консоли достаточно написать «$ python <путь_к_файлу.py>«, чтобы выполнить скрипт. В Windows интерпретатора изначально может и не быть, но он так же легко устанавливается. Возможно, вы ищете что-то подобное jenyay.net/Programming/Cxfreeze путь_к_файлу.py>
