Linux의 bash 스크립트에서 백업을 자동화하는 올바른 방법

Linux의 bash 스크립트에서 백업을 자동화하는 올바른 방법

Moodle 설치를 백업하기 위해 작성된 bash 스크립트가 있습니다. 잘 작동하고, 백업을 테스트해 보았는데, 문제가 생겼습니다. 백업을 할 때마다 비밀번호를 입력해야 하기 때문에 그냥 백업을 자동화하는 작업을 sudo실행하는 것이 아니라 직접 입력해야 합니다 .cron

cron이제 나는 이것이 내가 모르는 것과 관련이 있거나 SSH 키를 사용하는 것과 관련이 있다고 생각합니다. 어느 쪽이든 백업을 자동화하고 싶습니다.

#!/bin/bash

# Turn on Maintance mode and log it...
logger "BEGIN Turning on maintance mode in moodle"
lynx -cmd_script=./backupScripts/turnOnMaintMode http://moodle.leeand00domain.local
logger "END Turning on maintance mode complete."

logger "BEGIN Creating Backup Directory"
export bkdir=$(date +"%Y-%m-%d")
mkdir $bkdir 
cd $bkdir
logger "END Creating Backup Directory"

#Get a backup copy of the database
logger "BEGIN Backing up the Moodle Database"
mysqldump -u moodleuser --password=XXXXX -C -Q -e --create-options moodle > moodle-database.sql
logger "END Backing up the Moodle Database"

#Get a backup copy of moodle data 
logger "BEGIN Backing up moodledata"
tar -cvzf moodledata.tar.gz --exclude='/var/moodledata/cache' --exclude='/var/moodledata/lang' --exclude='/var/moodledata/sessions' --exclude='/var/moodledata/temp' /var/moodledata  && tar -cvzf moodleinstallation.tar.gz /var/www
logger "END Backing up moodledata"

cd ..

tar -cvzf  $bkdir.tar.gz  $bkdir

# Turn off Maintance mode and log it...
logger "BEGIN Turning off maintance mode in moodle"
lynx -cmd_script=./backupScripts/turnOffMaintMode http://moodle.leeand00domain.local
logger "END Turning off maintance mode in moodle complete."

답변1

나는 다음 중 하나를 수행합니다.

방법 #1 - 시스템 크론

실제 사용자의 crontab 항목이 아닌 시스템의 cron에 백업 스크립트를 추가합니다. 대부분의 시스템은 /etc다음과 같은 디렉토리 구조를 유지합니다.

$ ls -1d /etc/cron.*
/etc/cron.d
/etc/cron.daily
/etc/cron.deny
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

적절한 디렉토리에 원하는 빈도로 실행하려는 스크립트를 배치하기만 하면 됩니다.

방법 #2 - 비밀번호 없는 sudo

/etc/sudoers또 다른 방법은 편집 명령을 사용하여 파일에 항목을 설정하는 것입니다 visudo. 이 항목은 이 특정 스크립트에 대한 사용자의 crontab 항목에 비밀번호 없이 액세스할 수 있는 권한을 부여합니다. crontab의 항목은 다음과 같습니다.

$ sudo ...your script...

파일의 항목은 /etc/sudoers다음과 같습니다.

user ALL=(root) NOPASSWD: /home/user/cronscript.sh

인용하다

답변2

crontab에 들어가려면 루트를 사용하는 것이 좋습니다.

sudo crontab -e

이것을 스크립트의 첫 번째 명령으로 포함하면 모든 명령이 루트 crontab으로 실행됩니다.

더 많은 정보가 필요하시면 확인해 보세요이것페이지.

일반적으로 관리 권한으로 실행되는 명령(예: 일반적으로 sudo로 실행)은 루트 사용자의 crontab(사용자의 crontab이 아님)에 추가되어야 합니다.

관련 정보