私のbackup_system.shファイルはcrontabで実行されていません。

私のbackup_system.shファイルはcrontabで実行されていません。

それで、システムバックアップ用のスクリプトを作成してテストしてみましたが、うまくいきました。スクリプトは次のとおりです。

#!/bin/bash
backup_files="/home /var/spool/mail /etc /root /boot /opt"
dest="/mnt/backup"
day=$(date +%F)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"
echo "Backing up $backup_files to $dest/$archive_file"
date
echo
tar czf $dest/$archive_file $backup_files
echo
echo "Backup finished"
date
ls -lh $dest

しかし、crontabに入れるとうまくいきません。 "crontab -e"を使用し、そこに次のコマンドラインを置きます。

* * * * * /root/backup_system.sh

待っていましたが、何も起こりませんでした。私はどこで間違っているのかわかりません。 @Ubuntu 14.04を実行しており、スクリプトはchmodを使用して権限を変更しました。

答え1

スクリプトが実行可能でないか(修正を使用してchmod +x /root/backup_system.sh)、crondが実行されていない限り、スクリプトの実行を妨げる明らかに破損した部分はありません。

使用するすべてのコマンド(datehostnameおよび)は、crontabで変更しない限り、デフォルトパスになければなりませんtarls/bin

最も可能性の高い説明は、rootのcrontabの代わりにユーザーのcrontabでこのスクリプトを実行しようとしていることです。ユーザーには、ディレクトリまたは/rootスクリプトへの/root/backup_system.sh読み取りおよび実行アクセス権がありません。


ただし、変数は常に二重引用符で囲む必要があります。たとえば、モノリストを含む変数の場合は、$backup_files配列変数を使用することをお勧めします。

以下は、これらの問題を解決する拡張スクリプトバージョンです。

#!/bin/bash

backup_files=(/home /var/spool/mail /etc /root /boot /opt)
dest='/mnt/backup'
day=$(date +%F)
hostname=$(hostname -s)
archive_file="$dest/$hostname-$day.tgz"

echo "Backing up ${backup_files[@]} to $archive_file"
date
echo

tar czf "$archive_file" "${backup_files[@]}"

echo
echo "Backup finished"
date

ls -lh "$dest"

関連情報