それで、システムバックアップ用のスクリプトを作成してテストしてみましたが、うまくいきました。スクリプトは次のとおりです。
#!/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が実行されていない限り、スクリプトの実行を妨げる明らかに破損した部分はありません。
使用するすべてのコマンド(date
、hostname
および)は、crontabで変更しない限り、デフォルトパスになければなりませんtar
。ls
/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"