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.
Windows 10 Home Python 3.7.3 Raspberry Pi OS 10
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)')
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.
Ü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.
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.
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
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! !!
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.