GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara membuat skrip Python dijalankan sebagai layanan?

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


Linux
  1. Bagaimana Cara Membuat Skrip A Sebagai Root Secara Retroaktif?

  2. Bagaimana Menjalankan Skrip??

  3. Cara menjalankan skrip Python dari shell

  1. Cara membuat skrip Python berjalan seperti layanan atau daemon di Linux

  2. Jalankan skrip php sebagai proses daemon

  3. Dalam skrip Python, bagaimana cara mengatur PYTHONPATH?

  1. Bagaimana cara menginstal skrip untuk dijalankan di mana saja dari baris perintah?

  2. Jalankan skrip bash sebagai daemon

  3. Bagaimana menjalankan sbt sebagai daemon?