我遇到了一个 shell 脚本的问题,该脚本打算在 Redhat 6 服务器上的 cron 中每 30 分钟运行一次。shell 脚本基本上只是一个运行 python 脚本的命令。
服务器上的本机版本 python 是 2.6.6,但这个特定脚本所需的 python 版本是 python 2.7+。我可以使用“scl”命令轻松地在命令行上运行它(此示例包括 python -V 命令以显示版本更改):
$ python -V
Python 2.6.6
$ scl enable python27 bash
$ python -V
Python 2.7.3
此时我可以在命令行上运行python 2.7.3脚本没有问题。
这是障碍。
当您发出scl enable python27 bash
命令时,它会启动一个新的 bash shell 会话,该会话(再次)适用于交互式命令行工作。但是在 shell 脚本中执行此操作时,一旦它运行 bash 命令,脚本就会因为新会话而退出。
这是失败的shell脚本:
#!/bin/bash
cd /var/www/python/scripts/
scl enable python27 bash
python runAllUpserts.py >/dev/null 2>&1
它一到达第 4 行就停止了,因为“bash”将它从脚本中弹出并进入一个新的 bash shell。所以它永远不会看到我需要它运行的实际 python 命令。
另外,如果每 30 分钟运行一次,那么每次都会添加一个新的 bash,这又是一个问题。
由于几个原因,我现在不愿意将服务器上的本机 python 版本更新到 2.7.3。Redhat yum repos 还没有 python 2.7.3 并且手动安装将在 yum 更新系统之外。据我了解,yum 本身在 python 2.6.x 上运行。
这是我找到使用 scl 的方法的地方