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

U2ros
sumber
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
lukassos
sumber
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


sumber
7
$ servicename &

Penggunaan &menyebabkan program berjalan di latar belakang, alih-alih memblokir shell sampai program berakhir.

dixoncx
sumber
Tidak, tidak. Misalnya. dixon@dixon-vaio:~$ nautilus & [1] 11835. Ini mengembalikan proses id dan Anda akan meminta shell baru. Juga periksa ini: http://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and .
dixoncx
1
Saya berdiri dikoreksi. Suara turun dihapus.
Scott Severance
0

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

Nicholas Porter
sumber
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