在crontab中传递一个变量值

时间:2014-05-15 14:52:09

标签: sql bash shell cron crontab

我正在尝试将SQL文件导入到我的mysqlDB中,这应该每5分钟发生一次,因此我使用了crontab -e:

*/5 * * * * /usr/bin/mysql -u root -pexpress azuzDB < /home/admin/Desktop/backups/backup_n1.sql
好吧,cron工作正常,但是在问题上,backup_n * .sql名称也每5分钟更改一次,我对文件夹中的最新sql文件感兴趣所以我想知道获取最新文件通过应用此命令:

ls /home/admin/Desktop/backups -Art | tail -n 1

所以我想传递这个命令输出,它是=(backup_n * .sql&#34;最近的&#34;)

在import cron job命令中我在crontab中使用任何解决方案来传递centos的crontab中的变量?

最后一个输出是这样的:

 * * * * * lastSQL= ls /home/admin/Desktop/backups -Art | tail -n 1
 */5 * * * * /usr/bin/mysql -u root -pexpress azuzDB < /home/admin/Desktop/backups/$lastSQL

2 个答案:

答案 0 :(得分:1)

我建议你创建一个shell脚本,比如叫/home/admin/import.sh

$ cat import.sh 
#! /bin/bash
dir=/home/admin/Desktop/backups/
file=$( ls -At  $dir )
/usr/bin/mysql -u root -pexpress azuzDB < ${dir}/${file}

让你的crontab看起来像:

*/5 * * * * /bin/bash /home/admin/import.sh

答案 1 :(得分:0)

如评论中所示,获取最后一个文件的方式可以是:

ls -Art | tail -n 1

如果将其包裹在$()内,则无论何时放置它都会进行评估。因此,您可以这样做:

/usr/bin/mysql -u root -pexpress azuzDB < /home/admin/Desktop/backups/$(ls -Art /home/admin/Desktop/backups -Art | tail -n 1)