线上Linux执行Tomcat里的shell(startup.sh & shutdown.sh)脚本报错

线上Linux执行Tomcat里的shell(startup.sh & shutdown.sh & catalina.sh)脚本报错

最近一次线上迭代功能,重启tomcat,执行shutdown.sh报错:
-bash: ./version.sh: /bin/sh: bad interpreter: No such file or directory
,其他脚本同样

以下是排错过程:

1、查看是否为可执行文件

线上Linux执行Tomcat里的shell(startup.sh & shutdown.sh)脚本报错_第1张图片
以上可以看出权限并没有什么问题,如果有文件为不可执行文件直接使用命令:

chmod 777 filename

2、查看文件格式是否正确

线上Linux执行Tomcat里的shell(startup.sh & shutdown.sh)脚本报错_第2张图片
直接用vi或者vim命令打开文件,冒号加命令set ff 查看文件格式,结果如下图
在这里插入图片描述
说明我的格式也没有问题,如果读者有格式不是unix的,通过:
: set ff=unix 或者 : fileformat=unix来修改文件格式。
通过上面两个步骤其实并没有解决我的问题,而且我自己知道这两个步骤比较多余,因为在此之前我重启这个tomcat都没有什么问题,这是第一次出现,于是回想起近期这服务器上做的事情,然后想到之前要在这个服务器上跑一个爬虫项目,要用python3.0+,服务器自带的是2.6,自己手动升级了一下,除此之外并没有什么做其他操作。然后就进入了我第三步的排查。

3、自己手写shell脚本

我自己手动写了一个最简单的shell脚本

touch test.sh;
#脚本内容
#!/bin/bash
echo "hello world";#wq保存退出
#给刚写的脚本赋权限
chmod 777 test.sh;
#执行脚本
./test.sh;

命令结果如下图:
线上Linux执行Tomcat里的shell(startup.sh & shutdown.sh)脚本报错_第3张图片

能准确输入hello world,说明脚本是可以执行的,于是在是查看startup.sh、shutdown.sh和catalina.sh文件,发现脚本的第一行和我写的不一样,重点来了
脚本第一行都是#!/bin/sh,而我自己写的是#!/bin/bash,我尝试将tomcat的脚本文件改成后者(#!/bin/bash),发现执行成功:
线上Linux执行Tomcat里的shell(startup.sh & shutdown.sh)脚本报错_第4张图片
将三个脚本文件的第一行都改了以后,在执行脚本,就没有在报错了,tomcat正常停止、启动,到此我的问题解决,但是至于为什么导致的这个问题,花了一天还没有找到,因为开发任务较重,就暂时放下,以后有空会慢慢解决发现,如果内容有误,欢迎大家指正!

你可能感兴趣的:(JAVA,Linux,Shell,linux,shell,tomcat,centos,bash)