원격 데이터베이스의 로컬 복사본을 유지하기 위해 여러 cron
작업을 설정했습니다.
첫 번째는 매일 실행되고 정상적으로 작동하는 원격 컴퓨터에서 최신 버전의 데이터베이스를 다운로드합니다.
두 번째는 다운로드한 데이터를 가져오지만 작동하지 않습니다.
이 작업은 단순한 쉘 스크립트입니다.
#!/bin/bash
mysql -u root -mypass -h localhost my_db < my_db.sql
cron 작업은 다음과 같이 설정됩니다.
0 8 * * * bash /home/lampadmin/cron/my_db.sh
쉘 스크립트를 수동으로 실행하면 제대로 작동합니다.
작동하지 않는 이유를 cron을 통해 알아내려면 어떻게 해야 합니까?
답변1
Bash를 제거하려면 다음을 수행하십시오.
0 8 * * * /home/lampadmin/cron/my_db.sh
또한 my_db.sh가 실행 가능한지 확인하십시오.
chmod a+x /home/lampadmin/cron/my_db.sh
답변2
이 파일을 모든 사람이 실행할 수 있도록 만드는 것에 대해 기분이 좋지 않습니다. 나는 이것을 당신의 첫 번째 아이디어에 가깝게 시도할 것입니다.
0 8 * * * /bin/bash /home/lampadmin/cron/my_db.sh
명령을 실행하려면 항상 전체 경로를 사용하는 것이 좋습니다. 그렇지 않으면 당신은 무엇을 얻게 될지 결코 알 수 없습니다. 따라서 my_db.sql
파일에 전체 경로 도 제공해야 합니다 my_db.sh
.
하지만 그 외에는 명령줄을 통해 비밀번호를 설정하는 것에 대해 더 나쁜 감정을 느낍니다. ps
스크립트가 실행되면 루트 비밀번호가 모든 사용자에게 표시됩니다.
.my.cnf
이와 같은 파일을 통해 비밀번호를 설정하는 것이 좋습니다
[mysql]
user=root
password=rootpassword
해당 사용자의 홈 디렉터리에 있습니다. 이 방법이 요구 사항에 비해 너무 일반적인 경우 추가 파일에 넣고 /home/lampadmin/cron/my.cnf
이 설정을 사용할 수 있습니다.
/usr/bin/mysql --defaults-extra-file=/home/lampadin/cron/my.cnf -h localhost mydb < /pathto/my_db.sql
어떠한 경우에도 귀하의 my.cnf
비밀번호는 해당 비밀번호에 접근할 수 있는 사용자에 의해서만 보호됩니다. 당신은 사용해야합니다
chmod go-rwx my.cnf
이를 달성하기 위해.