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了
到此問題解決,問題處理下來,真的不理解歪果仁的思維,明明是指令碼內容有問題,卻丟擲個檔案不存在的異常,讓人費解。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2168891/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- nfs導致的作業系統目錄無法訪問NFS作業系統
- 執行 shell 指令碼 \r 問題解決指令碼
- [20220414]toad呼叫執行指令碼問題.txt指令碼
- Shell指令碼執行有哪些方式?linux系統學習指令碼Linux
- Linux系統Shell指令碼如何執行?linux運維繫統工程師Linux指令碼運維工程師
- Linux 後臺執行 PHP 指令碼LinuxPHP指令碼
- Linux 定時執行指令碼、命令Linux指令碼
- Linux定時執行.sh指令碼Linux指令碼
- Linux系統如何設定開機自動執行指令碼?Linux指令碼
- Vs Code中執行vue命令顯示"系統禁止執行指令碼"無法在終端使用Vue指令碼
- Linux系統檢查指令碼Linux指令碼
- Asp.Net Mvc ScriptBundle 指令碼檔案捆綁壓縮 導致 指令碼出錯的問題ASP.NETMVC指令碼
- shell指令碼linux命令連續執行指令碼Linux
- 解決 Python 指令碼無法生成結果的問題Python指令碼
- 執行shell指令碼指令碼
- 一個“指令碼執行夯死”問題的分析指令碼
- [20221126]tpt pr.sql指令碼執行問題.txtSQL指令碼
- 檔案格式引起的指令碼執行錯誤指令碼
- appium ios java 指令碼如何用指令執行,例如 adb 那種方式執行指令碼APPiOSJava指令碼
- linux系統for迴圈小指令碼Linux指令碼
- 『動善時』JMeter基礎 — 57、Linux系統中執行JMeter指令碼JMeterLinux指令碼
- 在 Linux 中執行.sh 指令碼 No such file or directoryLinux指令碼
- python寫的指令碼在kail Linux 執行Python指令碼AILinux
- Jou 的解決方案系列:vue 無法載入檔案,Windows 系統禁止執行指令碼VueWindows指令碼
- mybatis執行sql指令碼MyBatisSQL指令碼
- Selenium執行JavaScript指令碼JavaScript指令碼
- Shell指令碼入門:編寫格式與執行方式指令碼
- CentOS7.5安裝PostgreSQL作業系統配置指令碼CentOSSQL作業系統指令碼
- 執行python指令碼後臺執行Python指令碼
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- 如何在 Linux 中以指令碼模式執行 TopLinux指令碼模式
- shell指令碼編碼格式問題,bin/sh^M: bad interpreter: No such file or directory指令碼
- [20190107]生成bbed執行指令碼:指令碼
- sh指令碼執行報錯指令碼
- Laravel 中執行 Python 指令碼LaravelPython指令碼
- C# 執行Javascript指令碼C#JavaScript指令碼
- python ansible如何執行指令碼?Python指令碼
- linux系統軟體啟動sh指令碼Linux指令碼