그래서 시스템 백업을 위한 스크립트를 만들고 테스트해 보았는데 제대로 작동했습니다. 스크립트는 다음과 같습니다.
#!/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
가장 가능성 있는 설명은 루트의 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"