我试图确保我的 cron 任务每分钟都在执行,我想将每次运行的输出记录到 /var/tmp 中的某个位置。
我的 cron 文件如下所示:
hours_minutes_file=/var/tmp/moo_tools/runs/`date +"%H_%M"`
* * * * * /bin/bash -l -c 'cd /home/power_user/apps/transactional_processing/current && RAILS_ENV=production bundle exec rake moo_tools:process_records --silent ' > "$hours_minutes_file" 2>&1
结果文件看起来不像我期望的那样。我期望看到这样的文件,其中/var/tmp/moo_tools/runs/00:11
会00
显示一天中的小时数和11
分钟数。
相反,我得到的文件名是这样的(我手动创建了 00_33 和 00_34):
ls /var/tmp/moo_tools/runs/
00_33 00_34 '`date +"%H_%M"`'
我做错了什么?为什么字符串替换没有“起作用”?我尝试使用“${hours_minutes_file}”,但也没有用。我是 Bash 初学者,不知道如何解决这个问题。
答案1
hours_minutes_file
由 cron 设置,而不是由 shell 设置。Cron 不会解释反引号或括号 ( { }
),这些符号会成为文件名的一部分。
我会将包括创建该输出文件的逻辑放入 shell 脚本中,然后从 cron 执行该脚本。作为理想的副作用,您会得到一个更干净的 crontab。