---
# System prepended metadata

title: chap3 - 在docker中小心使用crontab
tags: [crontab]

---

# chap3 - 在docker中小心使用crontab
###### tags: `crontab`
- edited:2020.02.06
---
- 相關文章可以參考[Crontab教學 - 總覽](https://hackmd.io/0UWA1D-LRTOkx-EH4xnWQA?edit)
## Intro
- 一般使用crontab依照前兩章的設定基本上就可以了。
- 但在`docker`環境中，有太多的雷要踩，必須要<font color='red'>小心使用</font>

## 在docker container裡面使用crontab
- 如果你以為crontab會讀得到docker container裡面的`環境變數`, 那你就大錯特錯

:::info
>- <font color='red'> docker container裡面的crontab完全讀不到docker container裡面的環境</font>
>- <font color='red'> docker container裡面的crontab完全讀不到docker container裡面的環境</font>
>- <font color='red'> docker container裡面的crontab完全讀不到docker container裡面的環境</font>

 踩雷踩到很生氣, 所以要說三次
 
:::

- 做個實驗，在`Dockerfile`加入一些預設的變數，然後使用crontab去印出env，實驗結果，環境變數卻**不包含你預設的環境變數**:
```
HOME=/root                                     
LOGNAME=root                                   
PATH=/usr/bin:/bin                             
SHELL=/bin/sh                                   
PWD=/root  
```

### 讓你的任務順利取得設定的環境變數
- `crontab` 在執行任務時，會開啟一個全新的shell環境, 故`docker container`設定的環境變數，<font color='red'>通通抓不到</font>
- 要取得設定的環境變數，我們可以在執行任務前面加上新增環境變數的指令，如:`export LANG=C.UTF-8 & export DOCKER_HOME=/home/smart`，多個環境變數用`&`串起來即可。