Có những trường hợp chúng tôi muốn kiểm tra mã cục bộ của mình nếu nó chạy từ xa. Lưu ý rằng chúng tôi chạy mã cục bộ không chạy mã từ xa sau khi tải mã ở nơi xa. Ngoài ra, chúng tôi muốn giám sát đầu ra từ quá trình chạy từ xa. Vì vậy, trong chương này, chúng ta sẽ xem cách chúng ta có thể chạy mã từ xa và nhận kết quả đầu ra từ mã đó
Trong chương này, tôi đã sử dụng máy chủ của mình tại http. //www. bogotobogo. com/ dưới dạng một vị trí từ xa và CentOS ảo [Hypervisor. VMWare Workstation 10 ] được sử dụng làm địa phương của tôi
Tóm lại, chúng tôi có danh sách các lệnh sẽ được thực thi từ xa và nhận tệp đầu ra có nhật ký
Đây là tập lệnh shell đơn giản của chúng tôi
# s.sh uname -r uptime
Để bắt đầu khiêm tốn, trước tiên hãy thử chạy cục bộ
$ ./s.sh 2.6.32-358.el6.x86_64 14:25:38 up 4 days, 15:59, 2 users, load average: 0.00, 0.00, 0.00
Sau đó, chạy từ xa
$ ssh bogotob1@bogotobogo.com < ./s.sh Pseudo-terminal will not be allocated because stdin is not a terminal. bogotob1@bogotobogo.com's password: 3.12.26.1407184750 23:14:59 up 67 days, 14 min, 1 user, load average: 42.36, 30.37, 28.13
Một mẫu python I - chạy từ xa
Mã trăn của chúng tôi
# s.py #!/usr/bin/python import subprocess cmd_list = ['uname -r', 'uptime'] out = [] err = [] for cmd in cmd_list: args = cmd.split[] proc = subprocess.Popen[args, stdout=subprocess.PIPE, stderr=subprocess.PIPE] [stdoutdata, stderrdata] = proc.communicate[] out.append[stdoutdata] err.append[stderrdata] print 'out=',out print 'err=',err
Cách chạy từ xa sau đây sẽ không hoạt động
$ ssh bogotob1@bogotobogo.com python s.py bogotob1@bogotobogo.com's password: python: can't open file 's.py': [Errno 2] No such file or directory
Tuy nhiên nếu chạy theo cách này thì chúng ta có thể thực hiện chạy từ xa
$ cat s.py | ssh bogotob1@bogotobogo.com python - bogotob1@bogotobogo.com's password: out= ['3.12.26.1407184750\n', ' 16:01:11 up 67 days, 17:00, 1 user, load average: 19.17, 22.79, 22.32\n'] err= ['', '']
Hoặc một lần chạy từ xa khác sẽ hoạt động nếu chúng ta chạy theo cách này
$ ssh bogotob1@bogotobogo.com python < ./s.py bogotob1@bogotobogo.com's password: out= ['3.12.26.1407184750\n', ' 16:48:29 up 67 days, 17:47, 1 user, load average: 28.73, 23.32, 20.98\n'] err= ['', '']
Một mẫu python II - chạy từ xa
Lần này, chúng tôi chạy danh sách ba tập lệnh trong python [s. py]
['python uname.py', 'sh uptime.sh', 'perl hello.perl']
các s. mã py trông như thế này
________số 8Nếu chúng tôi cố chạy cái này từ xa, chúng tôi sẽ gặp lỗi như thế này
$ cat s.py | ssh bogotob1@bogotobogo.com python - bogotob1@bogotobogo.com's password: args= ['python', 'uname.py'] args= ['sh', 'uptime.sh'] args= ['perl', 'hello.perl'] out= ['', '', ''] err= ["python: can't open file 'uname.py': [Errno 2] No such file or directory\n", 'sh: uptime.sh: No such file or directory\n', 'Can\'t open perl script "hello.perl": No such file or directory\n']
Xảy ra lỗi vì mã cho rằng tập lệnh nằm cục bộ. Vì vậy, chúng ta cần chạy từng cái từ xa bằng ssh
Mẫu python III - chạy từ xa bằng os. hệ thống
Vì vậy, mỗi lệnh sẽ được chạy như thế này
$ ./s.sh 2.6.32-358.el6.x86_64 14:25:38 up 4 days, 15:59, 2 users, load average: 0.00, 0.00, 0.000
Tuy nhiên, chương trình sau vẫn không hoạt động. Shell từ xa vẫn nghĩ rằng ba mã [['uname. py', 'thời gian hoạt động. sh', 'xin chào. pl']] là cục bộ của nó [có nghĩa là chúng cư trú ở vị trí xa]
$ ./s.sh 2.6.32-358.el6.x86_64 14:25:38 up 4 days, 15:59, 2 users, load average: 0.00, 0.00, 0.001
đầu ra
$ ./s.sh 2.6.32-358.el6.x86_64 14:25:38 up 4 days, 15:59, 2 users, load average: 0.00, 0.00, 0.002
Nhưng mã đơn giản này sử dụng os. system[] thay vì subproccee. Popen[] dường như đang hoạt động
$ ./s.sh 2.6.32-358.el6.x86_64 14:25:38 up 4 days, 15:59, 2 users, load average: 0.00, 0.00, 0.003____14
Một mẫu trăn IV. chạy từ xa với chuyển hướng đầu ra
Nếu chúng tôi muốn lấy đầu ra std và lỗi dưới dạng một tệp từ lần chạy, đoạn mã sau sẽ làm điều đó cho chúng tôi [$ python s4. py]
Nội dung của email này và mọi tệp đính kèm đều được bảo mật và cũng có thể được đặc quyền. Nếu bạn không phải là người nhận dự định, vui lòng thông báo ngay cho người gửi và không tiết lộ nội dung cho bất kỳ người nào khác, sử dụng nó cho bất kỳ mục đích nào, hoặc lưu trữ hoặc sao chép thông tin trong bất kỳ phương tiện nào. Cảm ơn bạn