我正在尝试在树莓派服务器上自动执行备份管理,并将定期的 tar 触发放入 crontab 中。我通过 bash 脚本进行设置。首先,我设置任务,然后使用脚本执行预期的操作。问题是该脚本不是由 crontab 执行的。当我运行与 crontab 中保存的相同的命令时(我用命令检查它crontab -l
以确保它完全相同),它一切正常。
这是我的备份脚本:
#!/bin/sh
function set_backup(){
SCHEDULE_FILE="Configuration/crontab"
SCHEDULE="* * * * *"
USER=$(whoami)
WORKING_DIRECTORY="$PWD"
SCRIPT_NAME="/Admin/BackupHomeServer.sh"
COMMAND=' /bin/bash ' #these spaces are essential for proper file formatting
printf "$SCHEDULE " > $SCHEDULE_FILE
#printf "$USER" >> $SCHEDULE_FILE
printf "$COMMAND" >> $SCHEDULE_FILE
printf "$WORKING_DIRECTORY" >> $SCHEDULE_FILE
printf "$SCRIPT_NAME\n" >> $SCHEDULE_FILE
crontab $SCHEDULE_FILE
}
function perform_backup(){
BACKUP_FILENAME=$(date +%Y-%m-%d)
BACKUP_FILENAME+=".tar.gz"
BACKUP_DIR=$(cat Configuration/PyHomeServer.conf | grep "Backup directory:" | awk '{print $3}')
FILES_TO_INCLUDE="Configuration/ Database/"
if [ ! -d "$BACKUP_DIR" ]; then
mkdir $BACKUP_DIR
fi
tar -cvzpf $BACKUP_DIR/$BACKUP_FILENAME $FILES_TO_INCLUDE
}
function retrieve_latest_backup(){
echo To be implemented
}
if [ "$#" = "0" ]; then
perform_backup
elif [ "$1" = "retrieve" ]; then
retrieve_latest_backup
elif [ "$1" = "set" ]; then
set_backup
fi
这是我打电话时看到的crontab -l
:
* * * * * /bin/bash /home/gonczor/Documents/ServerPy/Admin/BaskupHomeServer.sh
答案1
我在 Brian Ward 的《Linux 如何工作》中找到了答案。我只是搞乱了语法。删除传递$USER
修复了问题。换句话说,我传递给的文件文件crontab
应该具有以下结构:
m h dm m dw command
并不是:
m h dm m dw user command
再次感谢 roaima 提供的有用提示。