gpt4 book ai didi

bash - scl 启用 python27 bash

转载 作者:行者123 更新时间:2023-11-29 08:43:59 25 4
gpt4 key购买 nike

我遇到了一个 shell 脚本的障碍,该脚本打算在 Redhat 6 服务器上每 30 分钟在 cron 中运行一次。 shell 脚本基本上只是一个运行 python 脚本的命令。

服务器上的 native 版本 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 session ,这(再次)适用于交互式命令行工作。但是当在 shell 脚本中执行此操作时,只要它运行 bash 命令,脚本就会因为新 session 而退出。

这是失败的 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使用方法的地方

http://developerblog.redhat.com/2013/02/14/setting-up-django-and-python-2-7-on-red-hat-enterprise-6-the-easy-way/

最佳答案

在 SCL 环境中,在一个 heredoc 中做所有事情是最好的选择,IMO:

scl enable python27 - << \EOF
cd /var/www/python/scripts/
python runAllUpserts.py >/dev/null 2>&1
EOF

另一种方法是直接在 scl 环境中运行第二个命令(这是唯一一个使用 Python 的命令):

cd /var/www/python/scripts/
scl enable python27 "python runAllUpserts.py >/dev/null 2>&1"

关于bash - scl 启用 python27 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16631461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com