linux无法运行脚本文件夹,Linux 操作系统脚本格式问题导致脚本无法执行

最近,在做一个mysql的mgr+proxysql的集群初始化工作。在proxysql部署完成,开启proxysql的自动探测mysql集群运行状态时,proxysql后台日志报错提示:无法执行脚本,脚本文件或路径不存在,但是通过linux的命令ls -l查看报错的文件路径是正确的,见了鬼。无奈之下,手工运行脚本也报错命令或文件不存在:-bash: ./gr_sw_mode_checker.sh: /bin/bash^M: bad interpreter: No such file or directory。但是,看到了^M,太熟悉了,vi查看了下文件的格式,竟然是dos格式的,然后格式化成unix格式的,proxysql重于能调取到脚本,简直要泪奔的感觉。

问题处理过程记录如下,以待后查:

1、proxysql开启scheduler后,后台日志提示调取脚本失败

[root@mmgrpro1 proxysql]# tail -f proxysql.log

2018-08-01 00:17:28

ProxySQL_Admin.cpp:7947:run_once(): [ERROR] Scheduler: Failed to run /var/lib/proxysql/gr_sw_mode_checker.sh

execve(): No such file or directory

2018-08-01 00:17:31 ProxySQL_Admin.cpp:7947:run_once(): [ERROR] Scheduler: Failed to run /var/lib/proxysql/gr_sw_mode_checker.sh

execve(): No such file or directory

2018-08-01 00:17:34 ProxySQL_Admin.cpp:7947:run_once(): [ERROR] Scheduler: Failed to run /var/lib/proxysql/gr_sw_mode_checker.sh

execve(): No such file or directory

2、linux操作系统层查看脚本所在路径是否存在

[root@mmgrpro1 proxysql]# ls -l /var/lib/proxysql/gr_sw_mode_checker.sh

-rwxr-xr-x 1 mysql mysql 8292 Jul 31 15:47 /var/lib/proxysql/gr_sw_mode_checker.sh

[root@mmgrpro1 proxysql]#

到这,事情陷入僵局,脚本明明存在,但是proxysql却说找不到脚本。在此之前发生过,如果脚本没有执行权限时,

proxysql会报权限拒绝:

2018-07-31 16:57:39

ProxySQL_Admin.cpp:7947:run_once(): [ERROR] Scheduler: Failed to run /var/lib/proxysql/gr_sw_mode_checker.sh

execve(): Permission denied

2018-07-31 16:57:44 ProxySQL_Admin.cpp:7947:run_once(): [ERROR] Scheduler: Failed to run /var/lib/proxysql/gr_sw_mode_checker.sh

execve(): Permission denied

2018-07-31 16:57:48 MySQL_Monitor.cpp:1362:monitor_ping(): [ERROR] Server 192.168.10.131:3306 missed 3 heartbeats, shunning it and killing all the connections

2018-07-31 16:57:49 ProxySQL_Admin.cpp:7947:run_once(): [ERROR] Scheduler: Failed to run /var/lib/proxysql/gr_sw_mode_checker.sh

execve(): Permission denied

3、自我反省,将实施方案看了无数变,又对照部署环境检查了好几遍,没发现任何异常,proxysql就是调取脚本失败,

实在是无奈呀,自己手工执行脚本,奇怪的是bash也报文件不存在:

[root@mmgrpro1 proxysql]# ./gr_sw_mode_checker.sh

-bash: ./gr_sw_mode_checker.sh:

/bin/bash^M

: bad interpreter: No such file or directory

[root@mmgrpro1 proxysql]# ls -l /var/lib/proxysql/gr_sw_mode_checker.sh

-rwxr-xr-x 1 mysql mysql 8292 Jul 31 15:47 /var/lib/proxysql/gr_sw_mode_checker.sh

[root@mmgrpro1 proxysql]#

但是,我看到了熟悉的面孔/bin/bash^M,终于找到了问题的症结,原本我是从网页上复制下来的脚本代码用UE编辑的,

脚本格式是DOS格式的,在unix或linux平台上需要转换成unix格式的。

4、问题处理,使用vi编辑器,格式化脚本

--vi 脚本名称,输入shift+:,然后输入set ff?回车,查看脚本格式

bdad032c752dbb05c9937c62bebf58b3.png

--set ff?回车后显示是dos格式

1f9166233114daab66f8183501658cb6.png

--vi下,将脚本从dos转换成unix,输入set ff=unix回车,然后wq保存退出

0c84c7cd1798ece024fbaf81a035ab10.png

5、脚本保存后,proxysql调取脚本成功,虽然还有脚本相关的异常,但是不报:no such file or directory了

808953f5757448d7fb038dedfd01f0dc.png

到此问题解决,问题处理下来,真的不理解歪果仁的思维,明明是脚本内容有问题,却抛出个文件不存在的异常,让人费解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值