crontab 任务未触发

crontab 任务未触发

我正在尝试在树莓派服务器上自动执行备份管理,并将定期的 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 提供的有用提示。

相关内容