Bash
crontab 環境
我編寫了各種腳本來啟動 Java 伺服器應用程序,這些應用程序通常在關閉之前執行 24 小時(通過呼叫具有不同參數的相同腳本)。
該腳本依賴於文件中定義的環境變數:
~/<user>.env
,我從.bashrc
.從命令行呼叫腳本時這很好用,但是如果我想將腳本添加為 crontab 條目,我會遇到
.bashrc
未讀取的問題。我的問題:解決這個問題的最佳實踐方法是什麼?我意識到我可以定義一個 crontab 條目,例如:
* * * * 1-5 /usr/bin/bash -c '. /home/myuser/myuser.env && /home/myuser/scripts/myscript.sh'
…但這看起來很醜陋。或者,我可以
myuser.env
在每個腳本的開頭獲取源,但這將成為維護的噩夢。任何幫助表示讚賞。
實際上,我通過在我的 bash 命令中添加“-l”(–login)標誌發現了一個相當優雅的解決方案,這會導致它獲取所有登錄文件,包括 .bashrc。因此我的 crontab 命令很簡單:
* * * * 1-5 /usr/bin/bash -lc '/mnt/group/core/deploy/scripts/test.sh' > /dev/null 2>&1
我通常用一個簡短的 cron 包裝腳本來解決這個問題:
#!/bin/bash [ -r $HOME/.bashrc ] && . $HOME/.bashrc [ -r $HOME/.profile ] && . $HOME/.profile exec "$@"
然後只需在 crontab 中使用您的包裝器為命令添加前綴:
* * * * 1-5 ~/scripts/cron-wrapper ~/scripts/myscript.sh * * * * 1-5 ~/scripts/cron-wrapper ~/scripts/myotherscript.sh
某些版本的 cron允許您直接在 crontab 中設置變數。不幸的是,我不能在工作中使用它們。