Chạy nhiều lệnh nohup trong nền


12

Có hai lệnh cmd1 và cmd2. Trong hai, cmd2 mất nhiều thời gian hơn để kết thúc. Cần chạy cmd2 rồi cmd1.

Đã thử chạy chúng theo cách sau:

bash$ (nohup ./cmd2>result2 &) && nohup ./cmd1>result1 &

hoặc là

bash$ (nohup ./cmd2>result2 &) ; nohup ./cmd1>result1 &

Nhưng cả hai lần tôi có thể thấy cmd1 không đợi cmd2 kết thúc và result1 được lấp đầy.

Làm thế nào để tạo cmd1 chạy sau cmd2 khi cả hai nên là quá trình nohup và chạy trong nền?


Câu hỏi này đã được hỏi unix.stackexchange.com/questions/67006/iêng
Rahul Patil

2
Câu hỏi trong unix.stackexchange.com/questions/67006/, hơi khác một chút vì tôi muốn duy trì thứ tự thực hiện của mình. Xin hãy sửa cho tôi nếu tôi sai trong việc hiểu câu hỏi khác.
dùng33767

Câu trả lời:


12

Bạn đã thực hiện cả hai cmd1cmd2chạy song song. Bạn nói: Bắt đầu cmd2 trong nền và cắt đứt mọi liên kết với nó. Bắt đầu cmd1 trong nền và cắt đứt mọi liên kết với nó. Bạn có nghĩa là: Bắt đầu cmd2 trong nền; khi hoàn tất, bắt đầu cmd1 (cũng ở chế độ nền). Vì không còn bất kỳ liên kết nào với tác vụ nền, bạn cần phải tạo ra một tác vụ nền thực hiện cmd2 rồi cmd1. Đây là cmd2; cmd1(hay đúng hơn là cmd2 && cmd1chỉ chạy cmd1 nếu cmd2 thành công) và bạn sẽ cần phải nói nohupđể bắt đầu một lớp vỏ chạy trong nền cho điều đó.

nohup sh -c './cmd2 >result2 && ./cmd1 >result1' &

Cảm ơn. Nó đang hoạt động tốt. Vâng, đó là những gì tôi đã nghĩ, sau khi thực hiện cmd đầu tiên, nó không ảnh hưởng đến lệnh thứ hai, nó bắt đầu ngay cả khi tôi muốn nó chờ lệnh đầu tiên kết thúc. Tôi cần đọc hướng dẫn về việc gửi lệnh đến nền.
dùng33767

3

Nếu bạn không phiền khi không sử dụng nohup:

{ command1 >result1 2>&1 && command2 >result2 2>&1 ; } & disown

Sẽ kiểm tra xem. Nhưng hiện tại sẽ đi với câu trả lời từ Giles nơi lệnh được gói bằng sh. Dù sao cũng cảm ơn
user33767

Đây là một ý tưởng tồi. Khi người dùng đăng xuất khỏi bàn điều khiển, nó sẽ giết phiên.
mootmoot

@mootmoot cái này hoạt động như dự định, hãy tự mình kiểm tra cái này; các lệnh sẽ không nhận được SIGHUP khi thoát khỏi trình bao cha.
artyom

Có, nó là shell an toàn nếu bạn chạy lệnh bằng crond / crontab. Nhưng nó không an toàn pty / xterm / ssh. unix.stackexchange.com/questions/3886/ Mạnh
mootmoot

2

Đơn giản chỉ cần sử dụng:

nohup ./cmd2>result2 & nohup ./cmd1>result1 & nohup ./cmd3>result3 &

Trong khi chạy nhiều lệnh vẫn ổn, tôi muốn duy trì thứ tự thực hiện chính xác, ví dụ cmd2 trước rồi cmd1 và điều đó không xảy ra với lệnh trên. cảm ơn
dùng33767

0

cho chúng tôi biết chính xác những gì bạn đang làm với cmd2 và cmd1. Nó phụ thuộc vào loại nhiệm vụ và đầu ra mà bạn muốn từ lệnh của bạn. Nếu bạn đang gặp vấn đề với việc nhấn hai lần nhập phím bằng lệnh thì có thể tìm ra bài viết này của tôi

bạn cũng có thể đi bằng con đường này

nohup `cmd2 && ccmd1` > Output.out 2> Error.err < /dev/null & 

Xem ảnh chụp màn hình được đưa ra dưới đây, Ở đây tôi đang sử dụng 3 lệnh và tất cả đang thực hiện từng bước một. Tôi đã sử dụng backticks cho nhiệm vụ này. Trong ảnh chụp màn hình, bạn cũng có thể quan sát dấu thời gian ngày. lệnh ngủ có 60 giây, do đó sau 60 giây lệnh tiếp theo của tôi được chạy thành công. Tôi đã sử dụng lệnh jobs để kiểm tra là bất kỳ lệnh nào vẫn đang chạy ở chế độ nền. Ở đây không có. công việc bạn có thể thấy là 1.

nohup-multi-lệnh

Ảnh chụp màn hình này cũng có sẵn trong liên kết này , nếu nó không hiển thị

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.