Ich habe ein Problem damit, meine App zum Laufen zu bringenin PM2. Es ist eine einfache Python 3-App, die Selenium und Chrome / Chromedriver verwendet, um unsere Website zu durchsuchen. Ich denke, das Problem liegt entweder darin, dass Chrome sich in einem anderen Ordner außerhalb der Apps-Ordner befindet oder dass die Verbindung zum Chrome / Chromedriver-Prozess einmal unterbrochen wird es beginnt, und ich weiß nur nicht, wie ich PM2 anweisen soll, diese Prozesse einzubeziehen.
Das Skript läuft einwandfrei ohne PM2, daher bin ich mir nicht sicherWo liegt das Problem oder wie kann es behoben werden? Hier ist die Ausgabe, die nach jedem Neustart generiert wird (sie startet, stürzt ab und startet ständig neu, ohne jemals eine Verbindung zur Website herzustellen):
0|Scraper | [2018-04-11 10:07:32.222861] STARTING SCRAPER
0|Scraper | Traceback (most recent call last):
0|Scraper | File "/home/myapp/Scraper.py", line 1617, in <module>
0|Scraper | process()
0|Scraper | File "/home/myapp/Scraper.py", line 164, in process
0|Scraper | browser = webdriver.Chrome(chrome_options = options, executable_path = path_to_chromedriver)
0|Scraper | File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/chrome/webdriver.py", line 62, in __init__
0|Scraper | self.service.start()
0|Scraper | File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/common/service.py", line 100, in start
0|Scraper | time.sleep(1)
0|Scraper | KeyboardInterrupt <--- I"m guessing this is PM2 killing the app after an error?
0|Scraper | Progress is Empty <--- "Empty" because it never did anything
0|Scraper | Progress SAVED
Dies sind meine Chrome-Optionen:
options = webdriver.ChromeOptions()
options.binary_location = "/usr/bin/google-chrome"
options.add_argument("headless")
options.add_argument("--log-level=3")
options.add_argument("window-size=1920x1080")
options.add_argument("--mute-audio")
options.add_argument("no-sandbox")
Der Chromedriver selbst befindet sich direkt im übergeordneten Verzeichnis der Apps.
Hier ist meine PM2-Prozess-JSON-Datei:
{
"apps" :
[
{
"name" : "Scraper",
"script" : "Scraper.py",
"interpreter" : "python3",
"watch" : true
}
]
}
Ich mache nur PM2 start Scraper-process.json
und dann PM2 logs Scraper
um die Ausgabe anzuzeigen.
BEARBEITEN: Hier ist die Initialisierung des Chromtreibers
try:
path_to_chromedriver = "chromedriver"
browser = webdriver.Chrome(chrome_options = options, executable_path = path_to_chromedriver)
except Exception as e:
print("[ERROR] Chromedriver: " + str(e))
Und dann schicke ich es an unsere Seite:
browser.get(ourURL)
Antworten:
0 für die Antwort № 1Es scheint, dass das Problem in meiner PM2-Prozessdatei lag. Ich habe "watch" fälschlicherweise auf "true" gesetzt und dabei vergessen, dass die App häufig Änderungen an Dateien vornimmt, wodurch pm2 die App jedes Mal neu startet.