不太理解為何中文技術博客搜不到這個問題的答案。。
其實 crontab 可以直接指定使用什么 shell 因為會用到 source 的關系所以我們可以先制定 shell 為 bash
SHELL=/bin/bash
既不需要自己去建 shell 腳本指定 #!/bin/sh 也不需要在要執行的命令前面加多余的參數。
但是也的確有個坑,我理解絕大多數同學要加載環境變量想法都跟我一樣會把環境變量存在 ~/.bashrc 中。然后在執行的時候會嘗試 source 該文件,比如
SHELL=/bin/bash
12 4 * * * source ~/.bashrc && cd /home/ubuntu/social-insights-magnus/ && xxxx
但是我發現,這樣是無法讀取到對應環境變量的。交互環境執行沒問題,但是使用 crontab 就是不行。這一點我看了一下沒弄太明白,但是我們可以新建文件 ~/.bash_profile 將環境變量放在這個里面申明。
然后重寫剛才的 crontab 任務
SHELL=/bin/bash
12 4 * * * source ~/.bash_profile && cd /home/ubuntu/social-insights-magnus/ && /opt/go/bin/go xxxx
即可。