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作業系統
- crontab無法執行perl指令碼 手工卻成功執行指令碼
- Linux管理指令碼之自動執行指令碼Linux指令碼
- 使用php作linux自動執行指令碼PHPLinux指令碼
- 定時重啟tomcat指令碼導致的亂碼問題Tomcat指令碼
- 執行 shell 指令碼 \r 問題解決指令碼
- SSH 無密碼遠端執行指令碼密碼指令碼
- Vs Code中執行vue命令顯示"系統禁止執行指令碼"無法在終端使用Vue指令碼
- Shell指令碼執行有哪些方式?linux系統學習指令碼Linux
- 無法找到指令碼庫指令碼
- 無需作業系統直接執行 Python 程式碼作業系統Python
- Asp.Net Mvc ScriptBundle 指令碼檔案捆綁壓縮 導致 指令碼出錯的問題ASP.NETMVC指令碼
- 執行shell指令碼指令碼
- 指令碼執行方式指令碼
- 一個“指令碼執行夯死”問題的分析指令碼
- Linux系統如何設定開機自動執行指令碼?Linux指令碼
- 檔案格式引起的指令碼執行錯誤指令碼
- RouterOS 限速指令碼和限執行緒指令碼ROS指令碼執行緒
- Linux作業系統的Shell程式設計指令碼欣賞(轉)Linux作業系統程式設計指令碼
- Linux 定時執行指令碼、命令Linux指令碼
- Linux定時執行.sh指令碼Linux指令碼
- Linux 後臺執行 PHP 指令碼LinuxPHP指令碼
- linux 後臺執行sql指令碼LinuxSQL指令碼
- Linux下如何執行Shell指令碼Linux指令碼
- Linux計劃任務crontab執行指令碼不正確的問題Linux指令碼
- linux下rman增量備份指令碼以及指令碼自動執行Linux指令碼
- Linux系統檢查指令碼Linux指令碼
- linux系統優化指令碼Linux優化指令碼
- 解決 Python 指令碼無法生成結果的問題Python指令碼
- Jou 的解決方案系列:vue 無法載入檔案,Windows 系統禁止執行指令碼VueWindows指令碼
- Linux系統Shell指令碼如何執行?linux運維繫統工程師Linux指令碼運維工程師
- CentOS7.5安裝PostgreSQL作業系統配置指令碼CentOSSQL作業系統指令碼
- 使用DBMS_SCHEDULER排程作業系統shell指令碼作業系統指令碼
- 作業系統比對指令碼[inststuff.pl](轉)作業系統指令碼
- crontab不執行mysql的指令碼問題的解決!MySql指令碼
- Shell指令碼入門:編寫格式與執行方式指令碼
- Linux系統程式設計(15)——shell指令碼語法Linux程式設計指令碼
- mybatis執行sql指令碼MyBatisSQL指令碼