Cronjob не выполняет скрипт python

#python #linux #cron #raspberry-pi

#python #linux #cron #raspberry-pi

Вопрос:

Я хочу использовать Cron для выполнения моего скрипта на python каждый час в течение дня. Поэтому я создал cronjob, который выглядит как: @hourly /home/pi/Desktop/repository/auslastung_download/auslastung.py

Cronjob должен выполнить следующий скрипт:

 from bs4 import BeautifulSoup
from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium import webdriver
from datetime import datetime, date


def get_auslastung_lichtenberg():
    try:
        url = "https://www.mcfit.com/de/fitnessstudios/studiosuche/studiodetails/studio/berlin-lichtenberg/"
        options = FirefoxOptions()
        options.add_argument("--headless")
        driver = webdriver.Firefox(options=options)
        driver.get(url)

        html_content = driver.page_source
        soup = BeautifulSoup(html_content, 'html.parser')

        elems = soup.find_all('div', {'class': 'sc-iJCRLp eDJvQP'})
        #print(elems)
        auslastung = str(elems).split("<span>")[1]
        #print(auslastung)
        auslastung = auslastung[:auslastung.rfind('</span>')]
        #print(auslastung)
        auslastung = str(auslastung).split("Auslastung ")[1]
        #print(auslastung)
        auslastung = auslastung[:auslastung.rfind('%')]
        print(auslastung)

        now = datetime.now()

        current_time = now.strftime("%H:%M:%S")
        #print("Current Time =", current_time)
        today = date.today()
        print(today)

        ergebnis = {'date': today, 'time':  current_time,'studio': "Berlin Lichtenberg", 'auslastung': auslastung}

        return ergebnis

    finally:
        try:
            driver.close()
        except:
            pass

"""
import json

with open('database.json', 'w') as f:
    json.dump(get_auslastung_lichtenberg(), f)
    """

import csv

with open('/home/pi/Desktop/repository/auslastung_download/data.csv', mode='a') as file:
    fieldnames = ['date', 'time', 'studio', 'auslastung']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    writer.writerow(get_auslastung_lichtenberg())

  

При выполнении через python3 auslastung.py все работает нормально, и скрипт записывает данные в файл data.csv.

Может быть, кто-нибудь может мне помочь 🙂

Комментарии:

1. у вас нет #!/usr/bin/python в верхней части скрипта, поэтому вам нужно вызвать python3 , прежде чем указывать путь к вашему скрипту

2. Вы пропустили ошибку в самой первой строке скрипта … что-то похожее на #!/usr/bin/env python

3. Я добавил #!/usr/bin/python, но он все равно не работает. Я также сделал chmod x для файла

4. Попробуйте найти, является ли /usr/bin/python ваш интерпретатор для python. Используйте which python3 , чтобы найти его.

5. usr/bin/python является ли интерпретатор в соответствии с which python

Ответ №1:

Прежде всего, вы должны убедиться, что ваш скрипт выполняется.

Если вы запускаете его в интерактивном python3 auslastung.py режиме, почему вы вызываете свой скрипт python по-другому в своем cron.

вы пробовали запускать только /home/pi/Desktop/repository/auslastung_download/auslastung.py в интерактивном режиме? python3 запускается ли он без инициализации?

Если ваш скрипт выполняется с python3 auslastung.py помощью на вашей crontab, вы должны указать полный путь как к интерпретатору, так и к сценарию:

@hourly /paht/to/python3 /full/path/to/script.py

Если вы создали свой скрипт для прямого запуска без указания интерпретатора, именно /full/path/to/script.py тогда на вашей crontab вы должны указать полный путь к скрипту:

@hourly /full/path/to/script.py

Вы можете включить ошибку: в самой первой строке вашего скрипта указывается, какой интерпретатор используется для его выполнения. Итак, ваша первая строка должна быть #!/path/to/your/interpreter

И тогда вы должны убедиться, что у скрипта есть разрешение на выполнение chmod x auslastung.py .

Комментарии:

1. Да, он запускается без начальной python3 команды. Поэтому он должен быть исполняемым из chmod x -за того, что я уже сделал. Моя запись в crontab выглядит точно так, как вы описали. Я сначала сделал crontab -e , а затем ввел @hourly /path/to/script.py . При перечислении заданий crontab -l я также вижу свою запись, но она не запускает скрипт каждый час