Case: Nhét 1 đoạn mysqldump vào crontab để backup db hàng đêm. Sáng hôm sau kiểm tra ko thấy file dump đâu.
đoạn command khai báo crontab
0 0 * * * /usr/bin/mysqldump -uzabbixuser -pMikita zabbixdb > /opt/backup/zabbixdb-`date +%F`.sql
Giải quyết ra sao?
chạy bằng crontab nên output lúc chạy sẽ được ném vào /var/mail/<user>
Ở đây chúng ta chạy cron trên user root, check file /var/mail/root
From root@devopsvn.xyz.localdomain Tue Mar 31 00:00:01 2020 Return-Path: <root@devopsvn.xyz.localdomain> X-Original-To: root Delivered-To: root@devopsvn.xyz.localdomain Received: by devopsvn.xyz.localdomain (Postfix, from userid 0) id 1FCA36000345; Tue, 31 Mar 2020 00:00:01 +0700 (+07) From: root@devopsvn.xyz.localdomain (Cron Daemon) To: root@devopsvn.xyz.localdomain Subject: Cron <root@devopsvn.xyz> /usr/bin/mysqldump -uzabbixuser -pMikita zabbixdb > /opt/backup/zabbixdb-`date + Content-Type: text/plain; charset=UTF-8 Auto-Submitted: auto-generated X-Cron-Env: <LANG=en_US.UTF-8> X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/root> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=root> X-Cron-Env: <USER=root> Message-Id: <20200330170001.1FCA36000345@devopsvn.xyz.localdomain> Date: Tue, 31 Mar 2020 00:00:01 +0700 (+07) /bin/sh: -c: line 0: unexpected EOF while looking for matching ``' /bin/sh: -c: line 1: syntax error: unexpected end of file
Để ý dòng subject, thấy command của chúng ta bị cắt mất còn 1 đoạn ngắn xíu, nguyên nhân do ký tự %
Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.
tiến hành escape ký tự %, cron thay đổi thành
0 0 * * * /usr/bin/mysqldump -uzabbixuser -pMikita zabbixdb > /opt/backup/zabbixdb-`date +\%F`.sql
lưu lại crontab.