Làm cách nào để chạy tập lệnh python trong nền ssh?

Tôi phải sắp xếp một số tác vụ tập lệnh giữa một số máy Linux và máy Windows. ssh hoạt động tốt cho các máy linux kiện bên dưới

// this does not collect any output, but still print output to stdout [on console].
// it just does not receive ctrl+c
python test.py &

// this writes output to specified file, does not write anything to console.
python test.py > log.txt &

// this writes error to specified file, but still print normal output to stdout.
python test.py 2> log.txt &
1

Nhưng phương pháp tương tự không hoạt động như tác vụ nền khi tôi gửi lệnh tới máy Windows.
Trên máy Windows, tôi có máy chủ ssh đang chạy và bản thân kết nối ssh đang hoạt động. Khóa công khai RSA cũng đã được chèn.
Trong thực tế, các lệnh bên dưới chạy.

ssh -n -f mysuer@targetwinmachine "python 'C:\Windowspath\myscript.py -someswitch parameter' &"

tuy nhiên, việc thực thi lệnh trong bash sẽ đưa thiết bị đầu cuối của tôi đến bảng điều khiển windows và không cho phép tôi chạy nó như một tác vụ nền.
Tôi đoán "&" không hoạt động trên windows để chạy lệnh dưới dạng tác vụ nền.

Làm cách nào tôi có thể chạy tập lệnh tương đương trên máy Windows dưới dạng tác vụ nền?

Câu trả lời hay nhất

Vâng,

// this does not collect any output, but still print output to stdout [on console].
// it just does not receive ctrl+c
python test.py &

// this writes output to specified file, does not write anything to console.
python test.py > log.txt &

// this writes error to specified file, but still print normal output to stdout.
python test.py 2> log.txt &
2 có một máy chủ ssh rất tốt cho windows. Trước tiên, bạn nên tải xuống và cài đặt cái này

Sau khi bạn có thể đăng nhập vào máy windows của mình bằng ssh dòng lệnh, bạn có thể sử dụng

// this does not collect any output, but still print output to stdout [on console].
// it just does not receive ctrl+c
python test.py &

// this writes output to specified file, does not write anything to console.
python test.py > log.txt &

// this writes error to specified file, but still print normal output to stdout.
python test.py 2> log.txt &
3 để thực hiện điều này không cần mật khẩu và tự động

Điều thứ ba là cài đặt python trên máy windows của bạn, bạn có thể lấy từ

// this does not collect any output, but still print output to stdout [on console].
// it just does not receive ctrl+c
python test.py &

// this writes output to specified file, does not write anything to console.
python test.py > log.txt &

// this writes error to specified file, but still print normal output to stdout.
python test.py 2> log.txt &
4

Đối với tôi, một trong những bước này không hoạt động, nhưng có lẽ vấn đề chính của bạn là do máy chủ ssh cài đặt trên máy tính windows của bạn. Bạn có thể đăng nhập vào máy chủ của mình bằng dòng lệnh ssh từ hộp unix/linux của mình không?

Giải pháp liên quan

Ssh – Shell script để tạo kết nối SSH nền nếu không tồn tại

bạn muốn làm việc với lệnh nohup?

Windows – ssh không cần mật khẩu từ Windows sang Linux để chạy tập lệnh từ dấu nhắc lệnh

Tôi khuyên bạn nên sử dụng Pageant. PuTTY kết hợp với Pageant có một số tùy chọn để sử dụng từ dòng lệnh. Kiểm tra tài liệu để biết chi tiết cụ thể về những gì bạn muốn làm

Bạn sẽ cần tạo cặp khóa riêng/công khai trên máy Linux. Máy Windows sử dụng khóa riêng cho người dùng trên máy chủ Linux

Khi bạn làm việc với tập lệnh trên phiên bản ec2, thách thức chính đối với tập lệnh chạy dài là đăng xuất khỏi ssh. và điều này phá vỡ tập lệnh đang chạy của bạn

Giải pháp cho việc này là bạn có thể chạy tập lệnh ở chế độ Nohup

chạy tập lệnh của bạn thêm nohup vào đầu lệnh thực thi tập lệnh. và tập lệnh của bạn sẽ chạy ở chế độ nền và đăng xuất để ssh không ảnh hưởng đến tập lệnh của bạn

nohup python your_scirpt.py &

Cảm ơn vì đã đọc

tài liệu tham khảo. https. // stackoverflow. com/questions/2975624/how-to-run-a-script-in-the-background-even-after-i-logout-ssh

Tôi viết kịch bản python có tên là

// this does not collect any output, but still print output to stdout [on console].
// it just does not receive ctrl+c
python test.py &

// this writes output to specified file, does not write anything to console.
python test.py > log.txt &

// this writes error to specified file, but still print normal output to stdout.
python test.py 2> log.txt &
5. Đúng như tên gọi, nó là một trình thu thập dữ liệu web và tôi muốn nó chạy liên tục trên máy Linux của mình ngay cả sau khi tôi đăng xuất và kết thúc phiên ssh. Tôi đã đọc rất nhiều ở đây và có rất nhiều gợi ý về việc sử dụng
// this does not collect any output, but still print output to stdout [on console].
// it just does not receive ctrl+c
python test.py &

// this writes output to specified file, does not write anything to console.
python test.py > log.txt &

// this writes error to specified file, but still print normal output to stdout.
python test.py 2> log.txt &
6. Điều này hoạt động tốt nhưng quá trình thực thi tập lệnh đã dừng ngay khi tôi đăng xuất. Mình cũng đã khám phá ứng dụng
// this does not collect any output, but still print output to stdout [on console].
// it just does not receive ctrl+c
python test.py &

// this writes output to specified file, does not write anything to console.
python test.py > log.txt &

// this writes error to specified file, but still print normal output to stdout.
python test.py 2> log.txt &
7 nhưng không có quyền root nên cũng bị lỗi. Bạn có thể gợi ý cho tôi một cách để giải quyết vấn đề này?

Ampersand chạy tập lệnh trong lớp con, vì vậy nếu bạn đăng xuất khỏi lớp vỏ hiện tại, lớp con sẽ bị chấm dứt. Ngoài ra, điều này sẽ không chuyển tiếp bất kỳ đầu ra nào nên chúng tôi cần thực hiện thủ công

Thí dụ

// this does not collect any output, but still print output to stdout [on console].
// it just does not receive ctrl+c
python test.py &

// this writes output to specified file, does not write anything to console.
python test.py > log.txt &

// this writes error to specified file, but still print normal output to stdout.
python test.py 2> log.txt &

// this does not collect any output, but still print output to stdout [on console].
// it just does not receive ctrl+c
python test.py &

// this writes output to specified file, does not write anything to console.
python test.py > log.txt &

// this writes error to specified file, but still print normal output to stdout.
python test.py 2> log.txt &
8

// this does not collect any output, but still print output to stdout [on console].
// it just does not receive ctrl+c
python test.py &

// this writes output to specified file, does not write anything to console.
python test.py > log.txt &

// this writes error to specified file, but still print normal output to stdout.
python test.py 2> log.txt &
8 chạy tập lệnh ở chế độ nền và sẽ không bị hủy khi bạn đăng xuất khỏi trình bao hiện tại. Quá trình sẽ bị hủy khi gửi tín hiệu
nohup python test.py &
5 [_______36] hoặc
nohup python test.py &
7 PID trực tiếp. Đầu ra sẽ được chuyển tiếp tới
nohup python test.py &
8 trong thư mục đang chạy lệnh

Đường dẫn này là cần thiết nếu bạn đã cài đặt nhiều phiên bản Python và

chmod +x test.py
0 sẽ đảm bảo rằng trình thông dịch Python đầu tiên trong biến môi trường
chmod +x test.py
1 của bạn được sử dụng. Bạn cũng có thể mã hóa cứng đường dẫn của trình thông dịch Python của mình [e. g.
chmod +x test.py
2], nhưng điều này không linh hoạt và không di động trên các máy khác. Tiếp theo, bạn sẽ cần đặt quyền của tệp để cho phép thực thi

chmod +x test.py

Bắt đầu tập lệnh Python trong nền

Bây giờ bạn có thể chạy tập lệnh với Nohup bỏ qua tín hiệu gác máy. Điều này có nghĩa là bạn có thể đóng thiết bị đầu cuối mà không dừng thực thi. Ngoài ra, đừng quên thêm

chmod +x test.py
3 để tập lệnh chạy ở chế độ nền

nohup python your_scirpt.py &
2

Nếu bạn không thêm shebang vào tệp, thay vào đó, bạn có thể chạy tập lệnh bằng lệnh này

nohup python your_scirpt.py &
3

Đầu ra sẽ được lưu trong tệp

chmod +x test.py
4, trừ khi bạn chỉ định tệp đầu ra như ở đây

nohup python your_scirpt.py &
5

Tìm và giết tiến trình đang chạy

Bạn có thể tìm thấy quy trình và Id quy trình của nó bằng lệnh này

nohup python your_scirpt.py &
6

Nếu bạn muốn dừng thực thi, bạn có thể tắt nó bằng lệnh kill

nohup python your_scirpt.py &
7

Cũng có thể tắt tiến trình bằng cách sử dụng pkill, nhưng hãy đảm bảo rằng bạn đã kiểm tra xem có tập lệnh nào khác đang chạy cùng tên không

nohup python your_scirpt.py &
8

Bộ đệm đầu ra

Nếu bạn kiểm tra tệp đầu ra

chmod +x test.py
4 trong khi thực thi, bạn có thể nhận thấy rằng các kết quả đầu ra không được ghi vào tệp này cho đến khi quá trình thực thi kết thúc. Điều này xảy ra do bộ đệm đầu ra. Nếu bạn thêm cờ
chmod +x test.py
6, bạn có thể tránh hiện tượng đệm đầu ra như thế này

Làm cách nào để chạy tập lệnh python trong SSH nền?

ssh vào máy từ xa
gõ tmux vào cmd
bắt đầu quá trình bạn muốn bên trong tmux e. g. python3 chính. py
rời phiên tmux bằng Ctrl+b rồi d

Làm cách nào để chạy tập lệnh python trong nền ngay cả sau khi tôi đăng xuất?

Vai trò của nohup. nohup làm cho tập lệnh của bạn bỏ qua SIGHUP và chuyển hướng thiết bị xuất chuẩn/thiết bị xuất chuẩn tới một tệp nohup. ra để lệnh có thể tiếp tục chạy trong nền sau khi bạn đăng xuất. Nếu bạn đóng shell/terminal hoặc đăng xuất, lệnh của bạn không còn là con của shell đó nữa.

Chủ Đề