[LINUX] Beachten Sie, dass Python ein Daemon ist

Ich möchte etwas, das in Python geschrieben ist, zu einem Daemon machen

Ich wollte immer ein in Python geschriebenes Programm auf Sakuras VPS ausführen. Darüber hinaus ist es einfach, weil es mit systemctl betrieben werden kann. Die Methode ist wie folgt. Versuchen Sie, mit Systemd einen eigenen Befehl in einen Dienst zu verwandeln

Umgebung

How to

Programm

/opt/python_daemon.py


#!/usr/bin/env python
import time
import os
import sys

def main_unit():#Schreiben Sie die Zeit alle 10 Sekunden
	while True:
		filepath = '/opt/pydmon.log'
		log_file = open(filepath,'a')
		try:
			log_file.write(time.ctime()+"\n")
		finally:
			log_file.close()
			time.sleep(10)

def daemonize():
	pid = os.fork()#Fork den Prozess hier
	if pid > 0:#Für übergeordneten Prozess(pid ist die Prozess-ID des untergeordneten Prozesses)
		pid_file = open('/var/run/python_daemon.pid','w')
		pid_file.write(str(pid)+"\n")
		pid_file.close()
		sys.exit()
	if pid == 0:#Für untergeordnete Prozesse
		main_unit()

if __name__ == '__main__':
	while True:
		daemonize()

Lassen Sie uns Shebang spezifizieren.

Fügen Sie am Anfang #! / Usr / bin / env python oder #! / Usr / bin / python hinzu. #! / usr / bin / env python scheint Python am Anfang von $ PATH bevorzugt zu verwenden. Andererseits scheint #! / Usr / bin / python Python direkt unter / usr / bin / anzugeben. Unannehmlichkeiten können auftreten, wenn die Version unterschiedlich ist.

Ich war mit dem Stapelüberlauf vertraut. Wenn Sie also interessiert sind, lesen Sie bitte. Why do people write #!/usr/bin/env python on the first line of a Python script?

Über daemonize ()

Beim Verzweigen des Prozesses schreibt der übergeordnete Prozess die in der Variablen pid zurückgegebene untergeordnete Prozess-ID in die PID-Datei und verschwindet. Andererseits führt der untergeordnete Prozess alle 10 Sekunden main_unit () in einer Endlosschleife aus.

Geben Sie nach dem Speichern die Ausführungsberechtigung.

sudo chmod 755 /opt/python_daemon.py Sie sollten jetzt die Ausführungsberechtigung haben.

Erstellen Sie eine Einheitendefinitionsdatei

/usr/lib/systemd/system/pythondaemon.service


[Unit]
Description=PythonDaemon

[Service]
ExecStart=/opt/python_daemon.py
Restart=always
Type=forking
PIDFile=/var/run/python_daemon.pid

[Install]
WantedBy=multi-user.target

Daemon-Definitionsdatei. Wenn ExecStart und PID-Datei übereinstimmen, ist das Kopieren und Einfügen meiner Meinung nach in Ordnung.

Starten Sie den Daemon

sudo systemctl daemon-reload sudo systemctl start pythondaemon.service

Nach dem erneuten Laden des Daemons wird der neu erstellte pythondaemon.service erkannt. Dann starte es mit start.

Ergebnis

$ sudo systemctl status pythondaemon.service


● pythondaemon.service - PythonDaemon
   Loaded: loaded (/usr/lib/systemd/system/pythondaemon.service; disabled; vendor preset: disabled)
   Active: active (running)seit dem Monat 2017-09-11 00:35:12 JST; 10s ago
  Process: 4633 ExecStart=/opt/python_daemon.py (code=exited, status=0/SUCCESS)
 Main PID: 4634 (python)
   CGroup: /system.slice/pythondaemon.service
           └─4634 python /opt/python_daemon.py

Es bewegte sich!

pydmon.log sieht so aus

$ cat pydmon.log 
Mon Sep 11 00:35:12 2017
Mon Sep 11 00:35:22 2017
Mon Sep 11 00:35:32 2017
Mon Sep 11 00:35:42 2017
Mon Sep 11 00:35:52 2017
Mon Sep 11 00:36:02 2017
Mon Sep 11 00:36:12 2017
Mon Sep 11 00:36:22 2017
Mon Sep 11 00:36:32 2017
Mon Sep 11 00:36:42 2017
Mon Sep 11 00:36:52 2017
Mon Sep 11 00:37:02 2017

Impressionen

Ich habe es genossen, weil es mit systemctl verwaltet werden kann und ich von etwas beeindruckt bin

Recommended Posts

Beachten Sie, dass Python ein Daemon ist
Hinweis: Python
Python-Notiz
Python lernen note_002
Hinweis: Python-Dekorator
Auf Python 2.7.9 aktualisiert
Python-Programmierhinweis
[Python] Lernnotiz 1
Python lernen note_004
Python lernen note_003
[Hinweis] openCV + Python
Python-Anfängernotiz
"Backport" zu Python 2
Versuch, SQLite3 mit Python zu handhaben [Hinweis]
3 Möglichkeiten, Zeitzeichenfolgen mit Python zu analysieren [Hinweis]
[Anmerkung] zukünftige Aussage ~ Python ~
[Hinweis] Datei lesen ~ Python ~
So installieren Sie Python
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Schreiben Sie Python2-Code in Python3 um (2to3)
So installieren Sie Python
Einführung in die Python-Sprache
Dämonisiere einen Python-Prozess
Einführung in OpenCV (Python) - (2)
Python Hinweis: Wenn Sie einer Zeichenfolge einen Wert zuweisen
Hinweis: Python Skeleton Nya
Einführung von Python 2.7 in CentOS 6.6
Verbinden Sie Python mit MySQL
Python Tkinter Primer Hinweis
Python-Skript zum Abrufen von Notizinformationen mit REAPER
Beachten Sie, dass Sie Materialien in Maya Python Bildtexturen zuweisen
Lesehinweis: Einführung in die Datenanalyse mit Python
Beachten Sie beim Initialisieren einer Liste in Python
Mercurial funktioniert nach der Migration von Python 2 auf Python 3 nicht mehr (Hinweis)
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Stellen Sie mit Python eine Verbindung zu BigQuery her
[Neueste Version 2020.8] So installieren Sie Python
[Python] Datum in Zeichenfolge konvertieren
Post von Python nach Slack
So installieren Sie Python [Windows]
poste an vim → Python → Slack
So löschen Sie stdout in Python
Konvertieren Sie numpy int64 in python int
python3: Verwendung der Flasche (2)
[Python] Liste in Pandas konvertieren [Pandas]
Flirte von PHP nach Python
Ein Weg zum mittleren Python
Versuchen Sie, Python selbst zu verstehen
Python-Notizen, die Sie bald vergessen sollten
[Python] Verwendung von Liste 1
Stellen Sie mit Python eine Verbindung zu Wikipedia her
So aktualisieren Sie Pythons Tkinter auf 8.6
Post to Slack mit Python 3
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Python-Eingabehinweis in AtCoder
[Hinweis] Betreiben Sie MongoDB mit Python
Mit Python auf Twitter posten