Làm thế nào để chạy một chương trình như một dịch vụ (im lặng)?


23

Tôi có một máy chủ dựa trên python mà tôi bắt đầu từ thiết bị đầu cuối. Trường hợp cụ thể này của thiết bị đầu cuối sau đó cung cấp quyền điều khiển cho chương trình và chương trình sử dụng nó như một loại cửa sổ đăng nhập, cho đến khi nó đóng. Điều này có bình thường không, hay bằng cách nào đó tôi nên thử khởi động chương trình theo một cách khác theo cách đơn giản là nó sẽ hiển thị như một quy trình hoạt động? Nếu tôi đóng thiết bị đầu cuối mà tôi khởi động chương trình, chương trình sẽ chết với nó.

Cảm ơn bạn


PHP cũng được đề cập trong câu trả lời này, nhưng nó cũng áp dụng cho Python: Askubfox.com/questions/26555/rasty-php-cli-server/ Kẻ

Câu trả lời:


9

Ngay cả bash cũ cũng đang sử dụng & để gửi các quy trình vào nền, nhưng cũng có một số cách khác .. nhưng hai cách cơ bản là:

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

Một số lệnh hữu ích khác:

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

Hmmm, tôi đã sử dụng lệnh 'top' để xem các quy trình cho đến bây giờ
U2ros

Giải pháp tuyệt vời. Có cách nào để sửa đổi tùy chọn 1. để pid được lưu vào một tập tin. Vì vậy, một tệp nhật ký và một tệp pid được tạo ra.
Oguz Bilgic

27

Biến nó thành một daemon (dịch vụ)
daemon --name="yourservicename" --output=log.txt sh yourscript.sh




0

Từ thiết bị đầu cuối, bạn cũng có thể chạy screenhoặc theo dõi lệnh của bạn với &. Cách dễ dàng để chạy các quy trình liên tục.


Theo tôi, chỉ sử dụng &để làm nền cho quá trình trong trường hợp này là rất ít. OP tuyên bố rằng máy chủ của anh ấy đăng nhập vào thiết bị xuất chuẩn như vậy, với &thiết bị đầu cuối của anh ấy sẽ bị lộn xộn với đầu ra. Ngoài ra, vì OP đề cập đến việc đóng thiết bị đầu cuối , OP sẽ không thể tiến hành lại quá trình một lần nữa và tất cả đầu ra log sẽ bị mất. Ít nhất, tốt hơn, để chuyển hướng nó đến một tệp nhật ký hoặc gắn bó với screenthiết lập - nhưng sau đó vui lòng giải thích những điều cơ bản của screenOP (tách / đính kèm / v.v.)
Robert Riedl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.