Bagaimana menjalankan program sebagai layanan (diam)?


23

Saya memiliki server berbasis python yang saya mulai dari terminal. Terminal khusus ini kemudian memberikan kontrol ke program, dan program menggunakannya sebagai semacam jendela logging, sampai ditutup. Apakah ini normal, atau haruskah saya entah bagaimana mencoba memulai program dengan cara lain di mana ia hanya akan ditampilkan sebagai proses aktif? Jika saya menutup terminal dari mana saya memulai program, program mati bersamanya.

Terima kasih


PHP disebutkan dalam jawaban ini tetapi juga berlaku untuk Python: askubuntu.com/questions/26555/running-php-cli-server/…

Jawaban:


9

Bahkan bash lama menggunakan & untuk mengirim proses ke latar belakang, tetapi ada beberapa cara lain juga .. tetapi dua dasarnya adalah ini:

1.)$~ your_command > outputfile_for_stdout &
        # runs your command in background, giving you only PID so you can exit that process by `kill -9 PID_of_process`
        # & goes at the end of row      


2.)$~ your_command > outputfile_for_stdout 
        # this will run your program normally
        # press  Ctrl + Z then program will pause
   $~ bg
        # now your program is running in background
   $~ fg
        # now your program came back to foreground
3.)you can run terminal window under screen command so it will live until you either kill it or you reboot your machine
   $~ screen
   $~ run_all_your_commands
       # Ctrl + A + D will then detach this screen
   $~ screen -r will reattach it

Beberapa perintah lain yang bermanfaat:

   $~ jobs
        # will show you all processes running right now, but without PID
   $~ ps
        # will show you all processes for actual terminal window

Hmmm, saya menggunakan perintah 'top' untuk melihat proses sampai sekarang
U2ros

Solusi bagus Apakah ada cara untuk mengubah 1. opsi sehingga pid disimpan ke file. Jadi file log dan file pid dihasilkan.
Oguz Bilgic

27

Ubah menjadi daemon (layanan)
daemon --name="yourservicename" --output=log.txt sh yourscript.sh




0

Dari terminal Anda juga dapat menjalankan screenatau menindaklanjuti perintah Anda &. Cara mudah untuk menjalankan proses yang berkelanjutan.


hanya menggunakan &latar belakang proses dalam hal ini adalah sedikit, menurut pendapat saya. OP menyatakan bahwa servernya log ke stdout demikian, dengan &terminalnya akan berantakan dengan output. Juga karena OP menyebutkan menutup terminal , OP tidak akan dapat melakukan foreground proses lagi dan semua log-output akan hilang. Lebih baik, setidaknya, untuk mengarahkan ulang ke file log atau tetap dengan screensetup - tapi kemudian tolong jelaskan dasar-dasar screenuntuk OP (lepaskan / lampirkan / dll)
Robert Riedl
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.