저는 라즈베리 파이 서버에서 백업 관리를 자동화하고 일반 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의 "How Linux Works"에서 답을 찾았습니다. 방금 구문을 엉망으로 만들었습니다. 통과를 제거하면 $USER
문제가 해결되었습니다. 즉, 내가 전달하는 파일은 crontab
다음과 같은 구조를 가져야 합니다.
m h dm m dw command
아니다:
m h dm m dw user command
유용한 팁을 주신 roaima님께 다시 한 번 감사드립니다.