我在Redhat 6服务器上的cron中设置了一个每30分钟运行一次的shell脚本,但遇到了问题。该shell脚本基本上只是用于运行Python脚本的命令。
服务器上原生版本的Python是2.6.6,但这个特定脚本需要使用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方法的地方
enable
脚本非常简单。要查看任何集合的路径,请使用以下命令:scl enable python27 'which python'
- RichVel