Shell script ของ mysqldump ทำงานได้ดีเมื่อทำงานด้วยตนเอง แต่ไม่ได้ทำงานใน cron?


4

ฉันมีเชลล์สคริปต์เพื่อรับการถ่ายโอนฐานข้อมูล MySQL สคริปต์นี้ทำงานได้ดีเมื่อทำงานด้วยตนเอง

#!/bin/sh
fqn=/home/Mysqluser/daily_dumps/bookstore_`date +%Y%m%d_%H%M%S`.sql.gz
mysqldump -u root -h localhost -pmysql#passwd bookstore | gzip > $fqn

แต่เมื่อฉันรวมสคริปต์นี้เพื่อให้ทำงานใน cron มันไม่ได้ทำการสำรองข้อมูล

นี่คือสิ่งที่ฉันรวมอยู่ในงาน cron:

00 00 * * *  /home/Mysqluser/daily_dumps/bin/backup_database.sh

สิ่งที่ฉันหายไปที่นี่?

คำตอบ:


0

อาจเป็นเพราะสภาพแวดล้อม (พิมพ์envที่พรอมต์เพื่อดู) แตกต่างกัน

ฉันมีปัญหาที่คล้ายกันพยายามเรียกใช้แบบสอบถาม mysql ใน cron.daily ฉันแก้ไขได้โดยการเพิ่มการตั้งค่าสถานะนี้ --defaults-file=/root/.my.cnf

ดูเหมือนว่า mysqldump มีการตั้งค่าสถานะคล้ายกัน--defaults-extra-file(ต้องเป็นอาร์กิวเมนต์แรก) แต่หากไม่ได้ผลลองพยายามค้นหาว่าอะไรคือความแตกต่างระหว่างสภาพแวดล้อมบรรทัดคำสั่งและสภาพแวดล้อม cron สร้าง cronjob ที่พิมพ์ผลลัพธ์ของenvไฟล์และเปรียบเทียบกับสิ่งที่คุณได้รับเมื่อคุณเรียกใช้จากเชลล์ของคุณ


ฉันมีบางอย่างที่คล้ายกันในการใช้งานสคริปต์ PHP ผ่าน cron งาน cron ถูกตั้งค่าให้ทำงานเป็นบัญชีผู้ใช้ของฉัน แต่เมื่อเราทำการตรวจสอบเพิ่มเติม php ที่ถูกเรียกใช้ภายใต้ cron นั้นมาจากไดเรกทอรีที่แตกต่างกันโดยสิ้นเชิงดังนั้นจึงไม่ทำงานภายใต้ php.ini เดียวกันกับบัญชีผู้ใช้แบบโต้ตอบของฉัน
Fiasco Labs

0

นอกจากนี้ตรวจสอบให้แน่ใจว่าmysqldumpอยู่ใน$PATHเมื่อทำงานจาก cron แนวทางปฏิบัติที่ดีที่สุดคือการตั้งค่า$PATHโดยตรงในสคริปต์ของคุณหรือเพื่อระบุเส้นทางแบบเต็มไปยังคำสั่งใด ๆ ที่ถูกเรียกใช้ (เช่น/usr/bin/mysqldump)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.