您好,登錄后才能下訂單哦!
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?回車,查看腳本格式
--set ff?回車后顯示是dos格式
--vi下,將腳本從dos轉換成unix,輸入set ff=unix回車,然后wq保存退出
5、腳本保存后,proxysql調取腳本成功,雖然還有腳本相關的異常,但是不報:no such file or directory了
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。