Tôi đã nhấn một snag với một kịch bản lệnh shell nhằm chạy 30 phút một lần trong cron trên máy chủ Redhat 6. Kịch bản lệnh shell về cơ bản chỉ là một lệnh để chạy một kịch bản lệnh python.scl kích hoạt python27 bash
Phiên bản gốc python trên máy chủ là 2.6.6 nhưng phiên bản python theo yêu cầu của tập lệnh cụ thể này là python 2.7+. Tôi có thể dễ dàng chạy này trên dòng lệnh bằng cách sử dụng "SCL" lệnh (ví dụ này bao gồm trăn -V lệnh để hiển thị sự thay đổi phiên bản):
$ python -V
Python 2.6.6
$ scl enable python27 bash
$ python -V
Python 2.7.3
Tại thời điểm này tôi có thể chạy python 2.7 .3 tập lệnh trên dòng lệnh không có vấn đề gì.
Đây là thẻ.
Khi bạn phát hành lệnh scl enable python27 bash
, nó bắt đầu phiên bash shell mới (một lần nữa) là tốt cho công việc dòng lệnh tương tác. Nhưng khi thực hiện điều này bên trong một kịch bản lệnh shell, ngay sau khi nó chạy lệnh bash, script sẽ thoát vì phiên mới.
Đây là shell script được không:
#!/bin/bash
cd /var/www/python/scripts/
scl enable python27 bash
python runAllUpserts.py >/dev/null 2>&1
Nó chỉ đơn giản dừng lại ngay khi nó chạm dòng 4 vì "bash" bật nó ra khỏi kịch bản và vào một vỏ bash tươi. Vì vậy, nó không bao giờ nhìn thấy lệnh python thực tế tôi cần nó để chạy.
Ngoài ra, nếu chạy 30 phút một lần, điều này sẽ thêm một dấu gạch chéo mới mỗi lần là một vấn đề khác.
Tôi không muốn cập nhật phiên bản python gốc trên máy chủ lên 2.7.3 ngay bây giờ do một số lý do. Các repo Redhat yum chưa có python 2.7.3 và cài đặt bằng tay sẽ nằm ngoài hệ thống cập nhật yum. Từ những gì tôi hiểu, yum tự chạy trên python 2.6.x.
Đây là nơi tôi tìm thấy phương pháp cho việc sử dụng SCL
Giải thích mã của bạn –