Я искал вокруг и нашел множество ответов, но не смог найти ни одного подходящего.
В настоящее время я использую сервер Ubuntu для моего django веб-сайта. Путь к файлу основной папки внутри проекта: '/ var / www/mysite/main'
Внутри этого каталога находится файл tasks.py, который я хотел бы выполнять в фоновом режиме, даже при выходе из S SH терминал.
Для справки, tasks.py ниже. В настоящее время все операции импорта находятся в том же (/ main), что и tasks.py, но, если возможно, я бы хотел разместить некоторые из них в других каталогах внутри / main:
#!/usr/bin/env python
from .db_service import *
from .pricer_inventory import *
from .propdb import *
from .inventory import *
import time
import schedule
import json
import os
from threading import Thread
def write_list_info_to_db():
print('Starting writing list info to db')
dir_name = os.path.dirname(__file__)
file_path = os.path.join(dir_name, 'propdb/inventory_pricing.json')
list_response = generate_list_info(get_list_of_inventory_styles(), 30, True)
with open(file_path, 'r') as file:
jdata = json.load(file)
for style in list_response.keys():
jdata.update({style: list_response[style]})
with open(file_path, 'w') as outfile:
json.dump(jdata, outfile)
write_list_info_to_db()
#schedule.every().day.at('08:30').do(write_list_info_to_db)
#schedule.every(1).to(2).hours.do(write_list_info_to_db)
class SchedulerThread(Thread):
@classmethod
def run(cls):
while True:
schedule.run_pending()
time.sleep(10)
SchedulerThread().start()
У меня также есть служба Конфигурационный файл в / lib / systemd / system / с именем 'tasks.service'
[Unit]
Description=Database Service
After=multi-user.target
Conflicts=getty@tty1.service
[Service]
Type=simple
ExecStart=/usr/bin/python3 /var/www/mysite/main/tasks.py
StandardInput=tty-force
[Install]
WantedBy=multi-user.target
Примечание. Я также попытался сохранить файл tasks.py в / usr / bin и указать там конфигурационный файл службы.
Затем я пытаюсь запустить службу из командной строки:
sudo systemctl daemon-reload
sudo systemctl enable tasks.service
sudo systemctl start tasks.service
sudo systemctl status tasks.service
Проверка состояния выдает:
● tasks.service - Database Service
Loaded: loaded (/lib/systemd/system/tasks.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2020-01-18 18:02:33 UTC; 4s ago
Process: 4789 ExecStart=/usr/bin/python3 /var/www/mysite/main/tasks.py (code=exited, status=1/FAILURE)
Main PID: 4789 (code=exited, status=1/FAILURE)
Jan 18 18:02:32 localhost systemd[1]: Started Database Service.
Jan 18 18:02:33 localhost systemd[1]: tasks.service: Main process exited, code=exited, status=1/FAILURE
Jan 18 18:02:33 localhost systemd[1]: tasks.service: Failed with result 'exit-code'.
Я думаю, что часть проблемы заключается в том, что python теперь запускается за пределами папки проекта и вызывает сбой при относительном импорте. (Когда я пытаюсь запустить tasks.py через командную строку, я получаю сообщение об ошибке «Модуль не назван»)
У меня точно нет опыта запуска сценариев как демонов или ubuntu / linux в целом, поэтому если есть лучшие способы go об этом, я открыт для всего.
Спасибо всем.