Saya menggunakan kode ini untuk melakukan daemonisasi pada aplikasi saya. Ini memungkinkan Anda start/stop/restart
skrip menggunakan perintah berikut.
python myscript.py start
python myscript.py stop
python myscript.py restart
Selain itu, saya juga memiliki skrip init.d untuk mengontrol layanan saya. Ini memungkinkan Anda memulai layanan secara otomatis saat sistem operasi Anda melakukan booting.
Berikut adalah contoh sederhana untuk memulai. Cukup pindahkan kode Anda ke dalam kelas, dan panggil dari run
fungsi di dalam MyDeamon
.
import sys
import time
from daemon import Daemon
class YourCode(object):
def run(self):
while True:
time.sleep(1)
class MyDaemon(Daemon):
def run(self):
# Or simply merge your code with MyDaemon.
your_code = YourCode()
your_code.run()
if __name__ == "__main__":
daemon = MyDaemon('/tmp/daemon-example.pid')
if len(sys.argv) == 2:
if 'start' == sys.argv[1]:
daemon.start()
elif 'stop' == sys.argv[1]:
daemon.stop()
elif 'restart' == sys.argv[1]:
daemon.restart()
else:
print "Unknown command"
sys.exit(2)
sys.exit(0)
else:
print "usage: %s start|stop|restart" % sys.argv[0]
sys.exit(2)
Pemula
Jika Anda menjalankan sistem operasi yang menggunakan Pemula (mis. CentOS 6) - Anda juga dapat menggunakan Pemula untuk mengelola layanan. Jika Anda menggunakan Pemula, Anda dapat menyimpan skrip apa adanya, dan cukup tambahkan sesuatu seperti ini di bawah /etc/init/my-service.conf
start on started sshd
stop on runlevel [!2345]
exec /usr/bin/python /opt/my_service.py
respawn
Anda kemudian dapat menggunakan start/stop/restart untuk mengelola layanan Anda.
mis.
start my-service
stop my-service
restart my-service
Contoh yang lebih mendetail tentang bekerja dengan pemula tersedia di sini.
Sistem
Jika Anda menjalankan sistem operasi yang menggunakan Systemd (mis. CentOS 7), Anda dapat melihat jawaban Stackoverflow berikut.
Saya menawarkan dua rekomendasi:
pengawas
1) Instal supervisor
paket (lebih banyak instruksi verbose di sini):
sudo apt-get install supervisor
2) Buat file konfigurasi untuk daemon Anda di /etc/supervisor/conf.d/flashpolicyd.conf
:
[program:flashpolicyd]
directory=/path/to/project/root
environment=ENV_VARIABLE=example,OTHER_ENV_VARIABLE=example2
command=python flashpolicyd.py
autostart=true
autorestart=true
3) Mulai ulang supervisor
untuk memuat .conf
baru Anda
supervisorctl update
supervisorctl restart flashpolicyd
systemd (jika saat ini digunakan oleh distro Linux Anda)
[Unit]
Description=My Python daemon
[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/project/main.py
WorkingDirectory=/opt/project/
Environment=API_KEY=123456789
Environment=API_PASS=password
Restart=always
RestartSec=2
[Install]
WantedBy=sysinit.target
Tempatkan file ini ke dalam /etc/systemd/system/my_daemon.service
dan aktifkan menggunakan systemctl daemon-reload && systemctl enable my_daemon && systemctl start my_daemon --no-block
.
Untuk melihat log:
systemctl status my_daemon