Bash
編寫腳本以 hour_seconds 文件名執行到 tmp 文件
我試圖確保我的 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 初學者在這裡,不知道如何解決這個問題。
hours_minutes_file
由 cron 設置,而不是由 shell 設置。Cron 不會解釋反引號或大括號 ({ }
),它們會成為文件名的一部分。我會將包括創建該輸出文件的邏輯放入 shell 腳本並從 cron 執行腳本。作為一個理想的副作用,你會得到一個更乾淨的 crontab。