exec cp 從腳本失敗,但直接發出時有效

exec cp 從腳本失敗,但直接發出時有效

我有一個將 SQL 備份複製到 Windows 伺服器的腳本。這是 /etc/fstab 中的行:

//my.win.box/share$ /winshare   cifs    credentials=/etc/credfile,dom=mydomain,uid=0,gid=0,file_mode=0600,dir_mode=0700 0 0

這是備份腳本:

備份.sh:

# copy zipped sql exports to /winshare/db
find /backups/sql/*sql.gz -mtime +1 -exec cp {} /winshare/db \;

使用 root 權限登入(在本例中為 root)

$ ./backup.sh
cp: cannot create regular file `/winshare/db/mydb_20130301.sql.gz': Permission denied

然而,如果我從提示符號發出命令,而不是透過腳本:

$ find /backups/sql/*sql.gz -mtime +1 -exec cp {} /winshare/db \;

文件按預期複製。再次以 root 身分登入。

什麼可能導致腳本內命令失敗,但相同的命令可以從控制台運行?

答案1

你沒有說這是什麼類型的機器,但我的第一個觀察是你的 backup.sh 中沒有解釋器行來指定應該執行它的程式。你想要這樣的東西:

#!/bin/bash
export PATH=/bin:/usr/bin

find....your stuff..here

現在,僅此並不能解決您的權限問題,但會有所幫助。您的 shell 可能正在獲取一個系統範圍的 .rc 文件,該文件指定了不同的 find 命令,或者誰知道它做了什麼。透過指定解釋器,您可以查看該解釋器的初始化檔案。另外,您的登入環境可能有腳本沒有的環境。

相關內容