PuTTY hoặc KHÁC - Tiếp tục thực thi lệnh ngay cả khi đã thoát PuTTY [trùng lặp]


13

Tôi có một vài lệnh mà tôi cần phải chạy. Các lệnh này cần liên tục chạy ngay cả sau khi tôi thoát khỏi giao diện của mình. Khi tôi có quyền truy cập vào GUI Linux, tôi thực thi một cái gì đó như:

cd /home/testuser/Scripts*
xterm -hold -T "Background_Script1" -e  "service1-start.sh" &
sleep 10
xterm -hold -T "Background_Script2" -e "service2-start.sh" &

Bất kỳ trợ giúp sẽ được nhiều đánh giá cao.



Có bất kỳ lý do tại sao bạn không chạy các dịch vụ này như daemon?
SevenSidedDie

Các lệnh có nghĩa là các dịch vụ sẽ chạy ở mức gần như 100% thời gian hoạt động "mãi mãi" hay một tác vụ xử lý dài hạn dự kiến ​​sẽ kết thúc sau một thời gian? Tất cả các câu trả lời sẽ "hoạt động" cho cả hai trường hợp, nhưng khuyến nghị thích hợp sẽ khác nhau.
Peteris

Bạn đang sử dụng bản phân phối cụ thể nào của Linux? Tôi thấy rằng việc chạy set -m;làm cho nó để các tập lệnh của tôi tiếp tục chạy sau khi tôi đăng xuất trên CentOS và RHEL.
ArtOfWarfare

Câu trả lời:


33

Thử

không có nền_ScriptX &

nohup đảm bảo rằng một quá trình không bị chấm dứt khi đóng thiết bị đầu cuối. Biểu tượng & đẩy quá trình vào nền.

Hy vọng điều này là hữu ích.


nohup chắc chắn thực hiện công việc
Pitto

Vinh dự khi được giup bạn.
Eamonn Travers

15
màn hình có một lợi thế rõ ràng so với nohup : nohup không cho phép bạn quay lại lệnh đang chạy (ví dụ: sáng hôm sau để đọc thiết bị xuất chuẩn của nó, sau đó chọn giết nó, v.v.). màn hình cho phép bạn làm chính xác điều đó.
Andreas F

1
nohup gửi đầu ra đến một tệp nơi nó có thể được xử lý.
Brian Knoblauch

Đối với những người mới sử dụng nohup, về cơ bản là "không bị treo máy" - với nohup, HUPtín hiệu hangup ( ) bị bỏ qua.
Dan7119

20

Nếu bạn muốn đọc đầu ra vào một ngày sau đó, bạn có thể sử dụng screen:

screen -d -m my_command

Điều này cung cấp cho bạn một thiết bị đầu cuối tách rời mà bạn có thể kết nối với later ( screen -r) để đọc đầu ra stdout / stderr.


2
+1. Đối với một, nếu bạn đóng thiết bị đầu cuối của bạn (ví dụ: putty) và sau đó bạn mở lại và gắn lại vào màn hình ( screen -r), bạn cũng sẽ có tất cả đầu ra chương trình của bạn được sản xuất và nếu không bạn đã "bỏ lỡ". Thêm vào đó, màn hình có thể làm rất nhiều điều tuyệt vời, như màn hình chia nhỏ, v.v.! :)
Alberto Santini

6

Một tùy chọn khác nếu nohuplệnh không khả dụng là sử dụng lệnh disown .

Trước tiên, bạn có thể xem các tác vụ nền của mình bằng cách chạy jobstrong thiết bị đầu cuối. Bạn có thể nhận được số lượng công việc từ đó.

Bây giờ chỉ cần chạy disown %[job number]và quá trình sẽ được tách ra khỏi thiết bị đầu cuối hiện tại và tồn tại khi bạn đăng xuất.

Lưu ý bên: Hãy chắc chắn rằng bạn đang hỏi đúng câu hỏi. Nếu bạn đang chạy các dịch vụ thực tế như bạn gợi ý trong mẫu của mình, bạn có thể muốn xem xét cách tạo một daemon trong HĐH mà bạn chọn. Điều này là để đảm bảo rằng quy trình vẫn chạy sau khi khởi động lại và làm cho nó phù hợp hơn với các dịch vụ khác.

Hi vọng điêu nay co ich.


3

screenđã được đề cập: có nhiều bộ ghép kênh đầu cuối khác ra khỏi đó. Tôi tmuxrất thích , xem ví dụ câu hỏi siêu người dùng khác này, tmux vs màn hình để so sánh.


0

Bạn cũng có thể thử: setsid Setsid cũng hoạt động với các chương trình nền và cho phép chúng tiếp tục chạy sau khi phiên terminal / ssh bị ngắt kết nối.

Sử dụng nó như thế này:

setsid program-to-background

Trang chủ: http://man7.org/linux/man-pages/man2/setsid.2.html

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.