J'ai toujours voulu exécuter un programme écrit en python sur le VPS de Sakura. De plus, il est facile car il peut être utilisé avec systemctl. La méthode est la suivante. Essayez de transformer votre propre commande en service à l'aide de Systemd
How to
/opt/python_daemon.py
#!/usr/bin/env python
import time
import os
import sys
def main_unit():#Écrivez l'heure toutes les 10 secondes
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()#Forkez le processus ici
if pid > 0:#Pour le processus parent(pid est l'ID de processus du processus enfant)
pid_file = open('/var/run/python_daemon.pid','w')
pid_file.write(str(pid)+"\n")
pid_file.close()
sys.exit()
if pid == 0:#Pour les processus enfants
main_unit()
if __name__ == '__main__':
while True:
daemonize()
Ajoutez #! / Usr / bin / env python
ou #! / Usr / bin / python
au début.
#! / usr / bin / env python
semble utiliser de préférence python au début de $ PATH
.
D'un autre côté, #! / Usr / bin / python
semble spécifier python directement sous / usr / bin /.
Un désagrément peut survenir si la version est différente.
Je connaissais bien le débordement de Stack, donc si vous êtes intéressé, veuillez vous y référer. Why do people write #!/usr/bin/env python on the first line of a Python script?
daemonize ()
En interrompant le processus, le processus parent écrit l'ID de processus enfant retourné dans la variable pid dans le fichier pid et disparaît.
Le processus fils, par contre, exécute main_unit ()
toutes les 10 secondes dans une boucle infinie.
sudo chmod 755 /opt/python_daemon.py
Vous devriez maintenant avoir l'autorisation d'exécution.
/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
Fichier de définition du démon. Si ExecStart et PID File correspondent, je pense que vous pouvez copier et coller.
sudo systemctl daemon-reload
sudo systemctl start pythondaemon.service
Après avoir rechargé le démon, le nouveau pythondaemon.service
sera reconnu.
Puis démarrez-le avec start
.
$ sudo systemctl status pythondaemon.service
● pythondaemon.service - PythonDaemon
Loaded: loaded (/usr/lib/systemd/system/pythondaemon.service; disabled; vendor preset: disabled)
Active: active (running)depuis le mois 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
Ça bouge!
pydmon.log ressemble à ceci
$ 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
Je l'ai apprécié car il peut être géré avec systemctl
, et je suis impressionné par quelque chose
Recommended Posts