#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
я также вижу свою запись, но она не запускает скрипт каждый час