Chạy script Bash trong nền và thoát terminal


Câu trả lời:


45

Để tránh các tín hiệu thoát truyền đến các tiến trình con của terminal và shell, hãy chạy lệnh với nohup, tức là:

nohup cmd &

1
Đây là câu trả lời chính xác. Không có tiếng ồn, quá trình bắt đầu vẫn được coi là "con" của quá trình đầu cuối và do đó chấm dứt nếu thiết bị đầu cuối bị đóng.
Izzy

3
cmd & disownhoạt động quá, vì &được coi như một ;dấu phân cách lệnh. Lệnh disown loại bỏ kết nối giữa phiên bash shell và lệnh nền.
lornix

2
zsh có một tốc ký cho việc này : cmd &|.
Thor

Để làm việc này, tôi phải thay đổi tùy chọn trong Terminal.app. Trong Cấu hình, chọn cấu hình hoạt động của bạn, sau đó Shell> Khi thoát khỏi vỏ> Đóng nếu vỏ thoát ra sạch
antoine

6

Sử dụng screen:

screen -S <session name> -d -m <your command>

sau đó bạn có thể thoát khỏi thiết bị đầu cuối, bạn cũng có thể gắn lại thiết bị đầu cuối bằng cách:

screen -r <session name>

Thêm thông tin: tham khảo


4

Nếu bạn muốn chạy một lệnh hoặc tệp cụ thể mỗi giây hoặc lâu hơn trong nền sau khi thoát khỏi thiết bị đầu cuối, bạn có thể thử điều nhỏ dễ dàng này;

nohup watch -n5 'bash script.sh' &

Điều đó sẽ chạy scipt.sh cứ sau 5 giây.


1
"Nohup" đã được bao phủ bởi câu trả lời được chấp nhận. Và tôi khá chắc chắn rằng người hỏi đã đề cập đến cron vì họ đã sử dụng nó để nói "Chạy lệnh này vài giây trong tương lai", không chạy nó định kỳ.
David Richerby

1
Câu trả lời của tôi không làm mọi thứ tồi tệ hơn. Không thấy điểm bỏ phiếu. Thần kinh sẽ là đủ.
jamietelin

3

Đặt một ký tự "&" sau lệnh của bạn.

ví dụ:

/home/your/script.sh &

7
trong trường hợp này, khi thiết bị đầu cuối bị đóng, quá trình bắt đầu cũng vậy /home/your/script.sh- vì nó không tách rời khỏi "cha mẹ" của nó, mà chỉ là "nền". Sử dụng nohupđể tách nó ra thực sự.
Izzy

Thật tệ, tôi không biết về điều đó, nhưng khi tôi thử nghiệm trên Debian của mình, lệnh tiếp tục thực thi sau khi đóng shell đã khởi chạy nó: /
Flinth

1
Tôi không chắc chắn chính xác quá trình nền được gắn vào và khi nào. Nhưng nếu bạn ví dụ như đăng nhập vào một máy tính từ xa, nó chắc chắn là dừng lại ngay sau khi bạn đăng xuất (trừ khi nó daemonized chính nó). Vì vậy, để chắc chắn 100%, bạn nên sử dụng nohup- nó cũng ghi lại tất cả đầu ra (bây giờ là vô hình) vào một tệp có tên nohup.outtrong thư mục mà bạn đã bắt đầu lệnh từ đó.
Izzy

Được rồi, cảm ơn bạn đã giải thích của bạn ^^
Flinth

Câu trả lời này có thể hoạt động tốt khi kết hợp với jobslệnh. Tôi thường xuyên muốn có thể quay lại quy trình shell sau khi làm nền.
djangofan
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.