私はラズベリーパイサーバーでバックアップ管理を自動化し、通常の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に感謝します。