centos 系统下sh脚本无法执行的问题处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos 系统下sh脚本无法执行的问题处理相关的知识,希望对你有一定的参考价值。

参考技术A 新的系统遇到奇怪的问题,看门狗脚本无法正常运行,提示如下错误:

 relocation error: /lib/libpthread.so.0: symbol h_errno, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference。

进入/usr/lib64目录下,发现软连接 libpthread.so.0-->libpthread-2.17.so.  

于是删除libpthread.so.0, 设想从自己运行程序的当前目录拷贝一个libpthread.so.0 覆盖。结果无法执行cp拷贝命令,提示缺少libpthread.so.0.  于是恢复原来的libpthread.so.0, 然后在执行cp强制覆盖命令,结果导致了服务器重启。

最后,将自己运行程序的libpthread.so.0 重命名为libpthread.so.1, 拷贝到/usr/lib64目录下。

然后新建软连接 ln -s libpthread.so.1 libpthread.so.0 .

此时在执行sh看门狗脚本,此时提示libresolv.so.2与GLIBC不兼容。

从新从自己运行的程序路径下的libresolv.so.2重命名为libresolv.so.3. 将libresolv.so.3拷贝到/usr/lib64路径下。

删除之前软连接libresolv.so.2。 重新建立软连接 ln -s libresolv.so.3  libresolv.so.2

现在再执行脚本,脚本运行正常。

dos下编辑过sh脚本后无法运行

情景:
同样的的脚本,在不同的机器下运行有的可以成功,有的运行失败,
前提:sh脚本windos下编辑过。

脚本在windows上修改之后,在每行尾部多了个 ^M,导致sh脚本在执行的时候可能shbang解析不了,导致脚本执行不了
报错 Syntax error: “(” unexpected (expecting “then”) 语法解析错误

解决:
在Linux查看^M,需要使用如下命令:
vim下 :e ++ff=unix %

去掉^M的方法:

1.在 Vim 的命令模式中输入 :%s/^M$//g 后,回车即会自动删除该文件中的所有 ^M 字符。
^M 注意要用 Ctrl + V Ctrl + M 来输入
2.cat filename1 | tr -d " " > newfile

  1. sed -e "s/^V^M//" filename > outputfilename
    4.tr -d ‘15‘ < filename> newfile

简单的,直接使用dos2unix, 将dos下的文件转换成unix文件,可以将后面的^M去掉。

以上是关于centos 系统下sh脚本无法执行的问题处理的主要内容,如果未能解决你的问题,请参考以下文章

iis 无法执行脚本了 怎么办

-bash: ./centos-7.6.sh: /bin/bash^M: bad interpreter问题解决

ubuntu 下执行脚本报错 [: 10: unexpected operator

centos根据php的curl请求post过来的参数执行对应的sh脚本

centos 7.9 优化脚本

CentOS 通用脚本处理jar包程序