service nginx status
env: /etc/init.d/nginx: No such file or directory
檔案明明存在,卻提示找不到。
行尾換行符格式不匹配:
LF (\\n, 0x0A)CRLF (\\r\\n, 0x0D 0x0A)若腳本在 Windows 編輯(Notepad 等)後直接上傳到 Linux,會攜帶 \\r,導致 Shebang 行 #!/bin/bash\\r 被核心視為不存在的解譯器路徑,進而報錯。
# 安裝
yum install -y dos2unix
# 或 apt-get install -y dos2unix
# 轉換
dos2unix /etc/init.d/nginx
sed -i 's/\r$//' /etc/init.d/nginx
vim /etc/init.d/nginx
:set fileformat=unix
:wq
tr -d '\r' < /etc/init.d/nginx > /etc/init.d/nginx.new
mv /etc/init.d/nginx.new /etc/init.d/nginx
chmod +x /etc/init.d/nginx
file /etc/init.d/nginx
# 輸出應包含 "ASCII text" 或 "UTF-8 Unicode text",不含 "with CRLF line terminators"
service nginx status
# 應正常顯示狀態
core.autocrlf=input,提交時自動轉 LF,檢出不轉 CRLF。Windows CRLF 與 Linux LF 混用是跨平台腳本部署的頭號殺手。遇到「檔案存在卻提示找不到」「語法錯誤莫名其妙」,第一時間用 dos2unix 或 sed -i 's/\\r$//' 清洗行尾,問題多半迎刃而解。