我遇到了一个shell脚本,它打算在Redhat 6服务器上每隔30分钟在cron上运行一次.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
Run Code Online (Sandbox Code Playgroud)
此时我可以在命令行上运行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
Run Code Online (Sandbox Code Playgroud)
它只是在它到达第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的方法的地方
有没有办法永久启用RedHat的自定义软件集合?
我已经安装了一个scl来在RHEL6中提供python27,并且不希望每次都必须启用自定义scl.
任何人都有运气从红帽软件收藏中使用rh-php56吗?
我看到有关如何在CLI中启用较新版本的php的文档...但不是为了让Apache使用通过rh-php56软件包安装的新版PHP.
(我应该澄清 - 这是RHEL 7.x盒子)
我的目标是在Centos 7上使用gcc 7.2(和clang 6)构建与Centos 7目标兼容的可执行文件,而不安装devtoolset,但*使用较新的C++ ABI*.
较新的ABI修复了lib中的一些缺陷,这些缺陷在没有ABI更改的情况下无法修复.例如list :: size O(1)Vs O(n),字符串没有COW.
我猜测为什么在以下问题中可能无法实现这一点. -D_GLIBCXX_USE_CXX11_ABI = 1对CentOS 7上的devtoolset-7无效
我有一个用 gcc6 编译的第 3 方库,我需要链接它。所以我卸载了标准的 GCC 包并安装了 Software Collections devtoolset-6 包(Centos 7.4)
$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-6/root/usr/libexec/gcc/x86_64-redhat-linux/6.3.1/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-6/root/usr --mandir=/opt/rh/devtoolset-6/root/usr/share/man --infodir=/opt/rh/devtoolset-6/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --enable-plugin --with-linker-hash-style=gnu --enable-initfini-array --disable-libgcj --with-default-libstdcxx-abi=gcc4-compatible --with-isl=/builddir/build/BUILD/gcc-6.3.1-20170216/obj-x86_64-redhat-linux/isl-install --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 6.3.1 20170216 (Red Hat 6.3.1-3) (GCC)
Run Code Online (Sandbox Code Playgroud)
但是,我收到了很多与此类似的链接错误:
libcomsd.so: undefined reference to `operator delete[](void*, unsigned long)@CXXABI_1.3.9'
Run Code Online (Sandbox Code Playgroud)
这似乎是因为 devtoolset 没有附带使用新编译器编译的 libstd++ 版本,因此链接器在 /usr/lib64 中找到了使用 gcc4 编译的标准版本,因此与编译的 …
我是 stackoverflow 的新手...这似乎是一个与非常有趣的社区分享知识和寻找解决方案的好地方。
我对 Ansble 和“scl”“mysql_install_dir”命令有问题。
当我手动执行“scl enable rh-mariadb102 bash && mysql_install_dir ...”时,当我在服务器控制台中正确执行此操作时,它可以完美工作。
但是当我尝试在 Ansible 上构建任务时:
- name: "Execute mysql_install_db to prepare DB"
shell: |
scl enable rh-mariadb102 bash
mysql_install_db --datadir=/data/{{ item.instance_name }}/db/mariadb102
become_user: root
with_items: "{{ vars_list }}"
Run Code Online (Sandbox Code Playgroud)
它返回错误:
“使用\“scl启用rh-mariadb102'服务...'\”调用”
这似乎 Ansible 不能很好地执行 scl enable 命令...或类似的命令。
以前有人被这个问题困扰过吗?
感谢您的帮助,并对英语不好表示歉意。
我遵循了软件集合快速入门,现在我已经安装了 Python 3.5。如何使它始终在我的中启用~/.bashrc,以便我不必手动启用它scl enable rh-python35 bash?
我已经习惯了在Debian / Ubuntu的发行版安装软件包,但现在我需要安装gcc和g++版本8 *。CentOS资料库中只有4. *版本。手动安装它们的正确方法是什么?
我目前正在尝试在Centos 6.6机器上构建一个Ruby应用程序.通过软件集合安装了不同的Ruby堆栈.请注意,我的机器上没有root,我的权限有限,特别是它们不包括软件包安装.
本机扩展不构建.它似乎ruby-devel缺失了,但管理员告诉我它已正确安装两个堆栈:
dnf install rh-ruby22-ruby-devel.x86_64 ruby193-ruby-devel.x86_64 -y
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
bob@server ~> scl enable rh-ruby22 bash
bash-4.1$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux-gnu]
bash-4.1$ gem install json Building native extensions. This could take a while... ERROR: Error installing json:
ERROR: Failed to build gem native extension.
/opt/rh/rh-ruby22/root/usr/bin/ruby -r ./siteconf20150625-17536-saskmd.rb extconf.rb mkmf.rb can't find header files for ruby at /opt/rh/rh-ruby22/root/usr/share/include/ruby.h
extconf failed, exit code 1
Gem files will remain installed in ~/.gem/ruby/gems/json-1.8.3 for inspection. Results logged to ~/.gem/ruby/extensions/x86_64-linux/json-1.8.3/gem_make.out …Run Code Online (Sandbox Code Playgroud)