Machen Sie aus einem Python-Programm einen Daemon und führen Sie es automatisch aus, wenn das Betriebssystem gestartet wird

Bis vor kurzem wurden in Python geschriebene Slackbot-Programme mit Python-Daemon zu Daemons gemacht, aber die Verwaltung war problematisch, da die Programme beim Start des Betriebssystems nicht automatisch ausgeführt wurden. Als ich versuchte, systemd anstelle von python-daemon zu verwenden, konnte ich das Programm beim Start des Betriebssystems automatisch ausführen, sodass ich Ihnen zeigen werde, wie es geht.

Ausführungsumgebung

Windows 10 Home Python 3.7.3 Raspberry Pi OS 10

1. Beispielprogramm zum Ausführen von slackbot

run.py


import time

from slackbot.bot import Bot
from slacker import Slacker

def main():
    bot = Bot()
    bot.run()

slack = Slacker('Geben Sie das API-Token ein')
channel_name = 'Geben Sie den Namen des Kanals ein, an den Sie eine Nachricht senden möchten'
message = 'Geben Sie den Inhalt der Nachricht ein'

if __name__ =="__main__":
    slack.chat.post_message(channel_name, message, as_user=True) #Veröffentlichen Sie beim Start eine Nachricht
    time.sleep(3) # 'Start request repeated too quickly.'Maßnahmen für
    main() #Starten Sie slackbot

slackbot_settings.py


API_TOKEN = 'Geben Sie das API-Token ein'
DEFAULT_REPLY = 'Geben Sie die von Bot zurückgegebene Nachricht ein, wenn Sie die Bedeutung der an Bot adressierten Nachricht nicht verstehen'

PLUGINS = ['run.py, slackbot_settings.Programmname anders als py verwendet
           (Beispiel: slackbot_module)schreiben']

slackbot_module.py


import random
import re

from slackbot.bot import listen_to

morning_greetings = ['Guten Morgen!', 'Nem ...(˘ω˘)']
@listen_to(r'^(guten Morgen|Guten Morgen ~|Guten Morgen)(Es gibt.*)?$')
def morning_greeting(message, fir_word, sec_word):
    message.reply(random.choice(morning_greetings))
    message.react('Geben Sie den englischen Namen des Piktogramms ein')

afternoon_greetings = ['Hallo!', 'Hallo']
@listen_to(r'^Hallo.*$')
def afternoon_greeting(message):
    message.reply(random.choice(afternoon_greetings))
    message.react('Geben Sie den englischen Namen des Piktogramms ein')

night_greetings = ['Guten Abend!', 'Guten Abend']
@listen_to(r'^Guten Abend.*$')
def night_greeting(message):
    message.reply(random.choice(night_greetings))
    message.react('Geben Sie den englischen Namen des Piktogramms ein)')

wichtiger Punkt

Stellen Sie sicher, dass Sie die Datei benennen, die API_TOKEN slackbot_settings.py beschreibt: 3 Stellen Sie sicher, dass Sie time.sleep (3) in run.py schreiben ...! Der Grund wird später erklärt.

2. Dateiübertragung

Übertragen Sie die lokal erstellte Datei auf den Raspberry Pi. Lassen Sie uns aus Sicherheitsgründen die Authentifizierung mit öffentlichem Schlüssel einrichten. Starten Sie nach Abschluss der Einstellungen die Eingabeaufforderung oder PowerShell und

scp Pfad der zu kopierenden Datei-i Pfad der privaten Schlüsseldatei-p Portnummer Benutzername@Hostname:Verzeichnisname zum Ablegen der Datei

Übertragen Sie die Datei mit.

3. SSH-Verbindung

SSH zum Raspberry Pi von der Kommandozeile.

ssh -i Pfad der privaten Schlüsseldatei-p Portnummer Benutzername@Hostname

Sie können schnell eine Verbindung zur Fernbedienung herstellen, indem Sie eine Konfigurationsdatei mit dem Namen "config" direkt unter "~ / .ssh /" erstellen.

Einstiegsbeispiel


Host raspi
    User hoge
    HostName raspberrypi
    Port 2222
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

In diesem Beispiel

ssh -i ~/.shh/id_rsa -p 2222 hoge@raspberry

Andere,

ssh raspi

Mit diesem Befehl können Sie auch eine SSH-Verbindung herstellen.

4. Systemeinstellungen

Erstellen Sie eine Servicedatei unter "/ etc / systemd / system /". Dieses Mal möchte ich run.py zu einem Daemon machen, also werde ich eine Datei namens rund.service erstellen (es spielt keine Rolle, ob der Dateiname angemessen ist).

$ sudo nano /etc/systemd/system/rund.service

Schreiben Sie die folgenden Einstellungen in rund.service.

rund.service


[Unit]
Description = slackbot daemon

[Service]
Type = simple
Restart = on-failure
ExecStart =Absoluter Pfad zum Python3-Lauf.Absoluter Weg zum Py

[Install]
WantedBy = multi-user.target

Da das Schreiben beendet ist, werde ich systemd starten.

$ sudo systemctl start rund

Vergessen Sie nicht zu überprüfen, ob es funktioniert! Lassen Sie uns den Status mit dem folgenden Befehl überprüfen.

$ sudo systemctl status rund

Wenn "Aktiv: Aktiv (läuft)" angezeigt wird, ist dies in Ordnung.

Stellen Sie das zuvor daemonisierte Programm run.py so ein, dass es beim Start des Betriebssystems automatisch ausgeführt wird.

$ sudo systemctl enable rund

5. Bestätigung des automatischen Starts

Stellen Sie für alle Fälle sicher, dass es automatisch gestartet werden kann.

$ sudo reboot

Überprüfen Sie nach dem erneuten Herstellen der Verbindung den Status erneut mit dem folgenden Befehl.

$ sudo systemctl status rund

Wie zuvor ist die Einstellung abgeschlossen, wenn "Aktiv: Aktiv (läuft)" angezeigt wird! !!

Wenn der Autostart fehlschlägt und "Startanforderung zu schnell wiederholt" angezeigt wird.

スクリーンショット 2020-08-16 160625.png

Unmittelbar nach dem Start des Betriebssystems ist die Internetverbindung noch nicht hergestellt. Selbst wenn run.py zu diesem Zeitpunkt ausgeführt wird, scheint der Slackbot nicht zu starten (in meiner Umgebung "After = network.target in der Servicedatei"). Es hat nicht funktioniert, auch wenn ich `) hinzugefügt habe. Wenn es nicht gestartet werden kann, führt rund.service run.py erneut aus. Da jedoch keine Internetverbindung besteht, schlägt der Start erneut fehl ... und so weiter. Nach der Untersuchung scheint der automatische Start so eingestellt zu sein, dass er stoppt, wenn der automatische Start fünfmal fehlschlägt und die Gesamtzeit zum Start von run.py zum sechsten Mal innerhalb von 10 Sekunden liegt. Um dieses Problem zu umgehen, schreiben Sie time.sleep () in die Zeile vor main (), damit es nicht automatisch 6 Mal innerhalb von 10 Sekunden gestartet wird.


Kürzung

if __name__ =="__main__":
    time.sleep(3)
    main()

Wenn Sie es so schreiben, wird es automatisch gestartet.

Recommended Posts

Machen Sie aus einem Python-Programm einen Daemon und führen Sie es automatisch aus, wenn das Betriebssystem gestartet wird
Schreiben wir ein Python-Programm und führen es aus
2. Erstellen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (2. Grundlagen des Python-Programms)
Verknüpfen Sie Python Enum mit einer Funktion, um es aufrufbar zu machen
Holen Sie sich die passende Zeichenfolge in den regulären Ausdruck und verwenden Sie sie beim Ersetzen unter Python3 erneut
[Python] Machen Sie die Funktion zu einer Lambda-Funktion
Beim Schreiben eines Programms in Python
Endlich ... Erstellen Sie einen Funkcontroller mit Python auf Raspberry Pi 3! (Wenn der Magnet näher gebracht wird, bewegt sich der Motor und stoppt automatisch)
[Python / Jupyter] Übersetzen Sie den Kommentar des in die Zwischenablage kopierten Programms und fügen Sie ihn in eine neue Zelle ein.
Als ich versuchte, Python auszuführen, wurde ich zum Microsoft Store übersprungen
Ich habe versucht, ein System zu erstellen, um den Programmführer automatisch zu erfassen → ihn an einem Tag im Kalender zu registrieren
Führen Sie den Python-Interpreter im Skript aus
[Persönliches Memo] Holen Sie sich Daten im Web und machen Sie daraus einen DataFrame
Ein Python-Programm, das die Größe eines Videos ändert und es in ein Bild verwandelt
Machen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (4. Datenstruktur)
[Python] Ein Programm, das die Partitur rundet
Ich habe ein System erstellt, das automatisch entscheidet, ob es morgen mit Python ausgeführt wird, und es zu Google Kalender hinzufügt.
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 3 sichtbar
[Python] Vorsichtsmaßnahmen beim Erfassen von Daten durch Scraping und Einfügen in die Liste
[Python] Ein Programm, das die minimalen und maximalen Werte ohne Verwendung von Methoden findet
[Python] Ein Programm, das die Anzahl der Aktualisierungen der höchsten und niedrigsten Datensätze berechnet
Holen Sie sich mit Python den Aktienkurs eines japanischen Unternehmens und erstellen Sie eine Grafik
Verwenden Sie Python auf Raspberry Pi 3, um die LED zu beleuchten, wenn es dunkel wird!
Führen Sie regelmäßig Python-Programme auf AWS Lambda aus
ffmpeg-Erstellen Sie eine Python-Umgebung und teilen Sie das Video
Kopieren Sie die Liste in Python
Berücksichtigung der Stärken und Schwächen von Python
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
Das Ergebnis der Erstellung eines Kartenalbums italienischer Jungvermählten in Python und dessen Weitergabe
[CGI] Führen Sie das Server-Python-Programm mit Vue.js + axios aus und rufen Sie die Ausgabedaten ab
[Selen] Öffnen Sie den Link in einem neuen Tab und verschieben Sie ihn [Python / Chrome-Treiber]
Es gibt ein Muster, das das Programm bei Verwendung von Python-Threading nicht gestoppt hat
Bis Sie Blender installieren und vorerst mit Python ausführen können
Bis Sie mit Python unter Windows 7 eine maschinelle Lernumgebung erstellen und ausführen
[Python] Ein Programm, das die Anzahl der Täler zählt
Geben Sie die Lautstärke unter Linux an und spielen Sie den Sound ab
Lass uns ein Makefile machen und es bauen (super Anfänger)
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Machen Sie mit Python einen Haltepunkt auf der c-Ebene
Python Gibt die Funktion an, die ausgeführt werden soll, wenn das Programm endet
[Python] Stellen Sie sicher, dass die empfangene Funktion eine benutzerdefinierte Funktion ist
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Wenn Sie mit python3 mit urllib auf eine URL zugreifen, die Japanisch (japanische URL) enthält, wird diese willkürlich mit HTML codiert, und es tritt ein Fehler auf. Notieren Sie sich daher die Problemumgehung
Führen Sie das Programm aus, ohne eine Python-Umgebung zu erstellen! !! (Erste Schritte mit Google Colaboratory)
Eine Geschichte, die es einfach macht, den Wohnbereich mit Elasticsearch und Python abzuschätzen
Ein Programm, das die für iOS-App-Symbole in Python erforderliche Bildgröße automatisch ändert
So starten Sie den PC jeden Morgen zu einer festgelegten Zeit und führen das Python-Programm aus
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Extrahieren Sie nur den Klang eines bestimmten Instruments aus der MIDI-Datei und machen Sie es zu einer separaten Datei
Analysieren Sie die Researchmap-API mit Python und erstellen Sie automatisch eine Word-Datei für die Leistungsliste
[Python-Anfänger] Variablen und Umfang innerhalb der Funktion (wenn die Verarbeitung innerhalb der Funktion außerhalb der Funktion reflektiert wird und wenn sie nicht reflektiert wird)
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
Vorsichtsmaßnahmen bei der Eingabe von CSV mit Python und der Ausgabe an json, um exe zu erstellen
[Python] Ein Programm, um die Anzahl der Äpfel und Orangen zu ermitteln, die geerntet werden können
Hinweis: Wenn Python auf ImageJ Fiji ausgeführt wird, wird java.lang.IllegalArgumentException und seine Lösung (Mac OS) angezeigt.
Versuchen Sie es mit GUI, PyQt in Python
So führen Sie ein Python-Programm in einem Shell-Skript aus
Schreiben Sie ein Python-Programm, um die Bearbeitungsentfernung [Python] [Levenshtein-Entfernung] zu ermitteln.