Bash

編寫腳本以 hour_seconds 文件名執行到 tmp 文件

  • March 5, 2021

我試圖確保我的 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:1100的小時和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。

引用自:https://serverfault.com/questions/1055987