Solaris 8 中的排除文件不起作用
Exclude-File in Solaris 8 doesn't work
我要 tar 整个 Solaris 系统。因此我写了一个脚本。当我 运行 这个脚本作为 root 时一切正常!当我从 cron 中 运行 使用相同的脚本时,我得到一个
tar: --exclude-from=: No such file or directory
或
tar: can't change directories to --exclude-from=/home/BACKUP: No such file or directory
我正在做的是:
#!/usr/local/bin/bash
#########################################################################
# Author: Marcus Gehring #
#########################################################################
#tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz --exclude-from=/home/BACKUP/$(uname -n).exclude / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz --exclude-from= "/home/BACKUP/$(uname -n).exclude" / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
但两者都不行。我还测试了以下内容:
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz -X "/home/BACKUP/$(uname -n).exclude" / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
排除文件如下:
/home*
/usr/local/var/httpd*
/usr/local/var/openldap-data*
如果是这个原因,我也尝试了排除文件的另一部分。所以我的第二个排除文件内容是:
/home
/usr/local/var/httpd
/usr/local/var/openldap-data
有人知道怎么回事吗?
只是为了澄清:
排除、日志和存档在一个目录中。
Tar-版本:
tar (GNU tar) 1.13.25
Copyright ? 2001 Free Software Foundation, Inc.
This program comes with NO WARRANTY, to the extent permitted by law.
You may redistribute it under the terms of the GNU General Public
License; see the file named COPYING for details. Written by John
Gilmore and Jay Fenlason.
此致
马库斯
更新 1:
嗨,马克,感谢您的支持:)但这只是我的 backup_script.sh 复制的命令;) 在 Crontab 中调用是:
# Backup on UNIX since 08162017
01 5 * * * /home/BACKUP/backup_script.sh
更新 2:
白天,我测试了脚本中的其他几个命令:
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz --exclude-from=/home/BACKUP/$(uname -n).exclude / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz --exclude-from= "/home/BACKUP/$(uname -n).exclude" / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz -X '/home/BACKUP/$(uname -n).exclude' / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz -X "/home/BACKUP/$(uname -n).exclude" / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz "/home/BACKUP/$(uname -n).exclude" / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
结果都是一样的。排除的文件未排除,在 -X 路径上我得到“tar:-X:没有这样的文件或目录”与之前的“--exclude-from”相同。
问题是当从 crontab 执行 tar 时和作为用户 tar.
使用 tar 之间的差异
只需将 which tar
添加到您的脚本并将输出与控制台的 which tar
进行比较以查看差异。
我要 tar 整个 Solaris 系统。因此我写了一个脚本。当我 运行 这个脚本作为 root 时一切正常!当我从 cron 中 运行 使用相同的脚本时,我得到一个
tar: --exclude-from=: No such file or directory
或
tar: can't change directories to --exclude-from=/home/BACKUP: No such file or directory
我正在做的是:
#!/usr/local/bin/bash
#########################################################################
# Author: Marcus Gehring #
#########################################################################
#tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz --exclude-from=/home/BACKUP/$(uname -n).exclude / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz --exclude-from= "/home/BACKUP/$(uname -n).exclude" / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
但两者都不行。我还测试了以下内容:
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz -X "/home/BACKUP/$(uname -n).exclude" / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
排除文件如下:
/home*
/usr/local/var/httpd*
/usr/local/var/openldap-data*
如果是这个原因,我也尝试了排除文件的另一部分。所以我的第二个排除文件内容是:
/home
/usr/local/var/httpd
/usr/local/var/openldap-data
有人知道怎么回事吗? 只是为了澄清: 排除、日志和存档在一个目录中。
Tar-版本:
tar (GNU tar) 1.13.25
Copyright ? 2001 Free Software Foundation, Inc.
This program comes with NO WARRANTY, to the extent permitted by law.
You may redistribute it under the terms of the GNU General Public
License; see the file named COPYING for details. Written by John
Gilmore and Jay Fenlason.
此致
马库斯
更新 1:
嗨,马克,感谢您的支持:)但这只是我的 backup_script.sh 复制的命令;) 在 Crontab 中调用是:
# Backup on UNIX since 08162017
01 5 * * * /home/BACKUP/backup_script.sh
更新 2:
白天,我测试了脚本中的其他几个命令:
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz --exclude-from=/home/BACKUP/$(uname -n).exclude / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz --exclude-from= "/home/BACKUP/$(uname -n).exclude" / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz -X '/home/BACKUP/$(uname -n).exclude' / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz -X "/home/BACKUP/$(uname -n).exclude" / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
tar -cvpf /home/BACKUP/$(uname -n)_$(date +%Y-%m-%d).tar.gz "/home/BACKUP/$(uname -n).exclude" / >> /home/BACKUP/$(uname -n)_BACKUP.log 2>&1
结果都是一样的。排除的文件未排除,在 -X 路径上我得到“tar:-X:没有这样的文件或目录”与之前的“--exclude-from”相同。
问题是当从 crontab 执行 tar 时和作为用户 tar.
使用 tar 之间的差异只需将 which tar
添加到您的脚本并将输出与控制台的 which tar
进行比较以查看差异。