그래서 크론 설정에 몇 가지 문제가 있습니다. 처음 설정하는 것이기 때문에 실수라고 가정합니다. cron에는 두 개의 작업이 설정되어 있습니다. 하나는 매일 오전 1시에 실행되고 다른 하나는 오전 2시에 실행됩니다. 이것은 내 /etc/crontab입니다:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 1 * * * root /usr/local/mysql/bin/mysqldump -usomeuser -psomepassword --opt zabbix > "/backups/zabbix_mysqldb.sql_$(date +%F_%R)"
0 2 * * * root /usr/bin/sh /zabbix_scripts/mysql_backup_script/zabbix-mysql-dump -p somepassword -o /backups
이것이 /var/log/cron에 보이는 내용입니다:
Feb 7 01:00:01 adlmonitor01 CROND[17334]: (root) CMD (/usr/local/mysql/bin/mysqldump -usomeuser -psomepassword --opt zabbix > "/backups/zabbix_mysqldb.sql_$(date +)
Feb 7 01:01:01 adlmonitor01 CROND[17539]: (root) CMD (run-parts /etc/cron.hourly)
Feb 7 01:01:01 adlmonitor01 run-parts(/etc/cron.hourly)[17539]: starting 0anacron
Feb 7 01:01:01 adlmonitor01 anacron[17548]: Anacron started on 2017-02-07
Feb 7 01:01:01 adlmonitor01 anacron[17548]: Normal exit (0 jobs run)
Feb 7 01:01:01 adlmonitor01 run-parts(/etc/cron.hourly)[17550]: finished 0anacron
Feb 7 02:00:01 adlmonitor01 CROND[28788]: (root) CMD (/usr/bin/sh /zabbix_scripts/mysql_backup_script/zabbix-mysql-dump -p somepassword -o /backups)
Feb 7 02:01:01 adlmonitor01 CROND[28992]: (root) CMD (run-parts /etc/cron.hourly)
Feb 7 02:01:01 adlmonitor01 run-parts(/etc/cron.hourly)[28992]: starting 0anacron
Feb 7 02:01:01 adlmonitor01 anacron[29001]: Anacron started on 2017-02-07
Feb 7 02:01:01 adlmonitor01 anacron[29001]: Normal exit (0 jobs run)
Feb 7 02:01:01 adlmonitor01 run-parts(/etc/cron.hourly)[29003]: finished 0anacron
내 생각엔 구문 오류가 발생한 것 같은데 어디인지 알 수 없는 것 같습니다. 누군가 설명할 수 있나요?
답변1
만들려는 긴 명령 호출을 바꾸고 동일한 작업을 수행하는 스크립트로 출력을 리디렉션해 보세요.
/usr/local/mysql/bin/mysqldump -usomeuser -psomepassword --opt zabbix > "/backups/zabbix_mysqldb.sql_$(date +%F_%R)"
/root/mytestscript와 같은 스크립트 파일을 작성하여 실행 가능하게 만들고 cron에서 호출합니다.
0 1 * * * root /root/mytestscript > /root/mytestscript.log 2> /root/mytestscript.err
...또는 mytestscript 자체의 본문에 출력 및 오류 로깅을 포함시키는 것이 더 좋습니다. 이를 통해 다음을 수행할 수 있습니다.
0 1 * * * root /root/mytestscript
cron이 stdout 및 stderr을 먹고 있는 것을 알 수 있습니다(또는 클래식 cron에서와 같이우편귀하의 출력). 위의 두 가지 호출 방법 중 하나를 사용하면 예측 가능한 위치에서 모든 로그를 볼 수 있습니다.
마지막으로, 참고로 스크립트에 비밀번호를 입력하는 것은 안전하지 않으므로 문제를 해결할 때까지 이는 모두 임시 해결 방법입니다. 노력하다https://stackoverflow.com/questions/6861355/mysqldump-launched-by-cron-and-password-security/6861458#6861458도움을 받으세요.