Ubuntu 18.04 のスタートアップスクリプトで環境変数を設定する

[Ubuntu 18.04 でのスタートアップスクリプト指定の良い方法](https://qiita.com/TsuyoshiUshio@github/items/f1d2fbf1fd9230f680be)のポストで記述したが、前回は、Ubuntuのスタートアップスクリプトを`crontab`で作成する方法を記述した。

しかし、あの方法では一つ欠点がある。環境変数がうまく反映されないのだ。

# 環境変数を設定しない場合

前回の方法で例えばこんなスクリプトを書いてみる。本来はスタートアップスクリプトとして書くのだが、今回はテストのために、テストスクリプトを書いてみた。クーロンを設定するシェルと、単純に環境変数を出力するシェルだ。

_set_cron.sh_

```bash
#!/bin/bash

PATH=/home/azureuser/csv:$PATH
SHELL_DIR=/home/ushio/Codes/DevSecOps/volley/playground/cron
SHELL_FILE=${SHELL_DIR}/foo.sh
(echo "*/1 * * * * ${SHELL_FILE} > ${SHELL_DIR}/abc.log") | crontab -u ushio -
```

_foo.sh_

```bash
#!/bin/bash

echo "Print PATH environment variables."
echo $PATH
```

これを普通に実行すると次のようになる。ちなみに、設定の反映は、クーロンが起動していないといけないため、と設定反映のため、リスタートしておく。

```bash
$ ./set_cron.sh
$ sudo /etc/init.d/cron restart
```

## 実行結果

凄くPATHが少ない。crontabで設定した結果を見ても、PATHは含まれていない。

```bash
$ cat abc.log
Print PATH environment variables.
/usr/bin:/bin
```

_/var/spool/cron/crontabs/ushio_

```bash
$ sudo cat  /var/spool/cron/crontabs/ushio
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (- installed on Wed Dec 25 22:32:15 2019)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
*/1 * * * * /home/ushio/Codes/DevSecOps/volley/playground/cron/foo.sh > /home/ushio/Codes/DevSecOps/volley/playground/cron/abc.log
```

# PATH を含む方法
改行コード`\n`は、crontabは認識してくれなさそうなので、複数行を送る方法はないみたいなので、次のような工夫をしてみました。２回crontabを実施するけど、２回目は、１回目に設定した内容を引き継ぐようにしています。`-l`オプションをつかって、現在の内容をとり、それと新しい設定をマージしています。

_set_cron.sh_

```bash
#!/bin/bash

PATH=/home/azureuser/csv:$PATH
SHELL_DIR=/home/ushio/Codes/DevSecOps/volley/playground/cron
SHELL_FILE=${SHELL_DIR}/foo.sh
echo "PATH=${PATH}" | crontab -u ushio -
(crontab -l 2>/dev/null; echo "*/1 * * * * ${SHELL_FILE} > ${SHELL_DIR}/abc.log") | crontab -u ushio -
```

## 実行結果

想定通りの結果がでていますね。

```bash
$ Print PATH environment variables.
/home/azureuser/csv:/home/ushio/.goenv/versions/1.13.4/bin:/home/ushio/.goenv/shims:/home/ushio/.goenv/bin:/home/ushio/.anyenv/bin:/home/ushio/.vscode-server/bin/8795a9889db74563ddd43eb0a897a2384129a619/bin:/home/ushio/.goenv/versions/1.13.4/bin:/home/ushio/.goenv/shims:/home/ushio/.goenv/bin:/home/ushio/.anyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/ushio/dotnet:/usr/lib/jvm/java-8-openjdk-amd64/bin:/home/ushio/Codes/DevSecOps/EpiServer/StressTesting/apache-jmeter-5.2/bin:/home/ushio/go/1.13.4/bin:/home/ushio/dotnet:/usr/lib/jvm/java-8-openjdk-amd64/bin:/home/ushio/Codes/DevSecOps/EpiServer/StressTesting/apache-jmeter-5.2/bin:/home/ushio/go/1.13.4/bin
```

_/var/spool/cron/crontabs/ushio_

```bash
$ sudo cat  /var/spool/cron/crontabs/ushio
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (- installed on Wed Dec 25 22:32:15 2019)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
PATH=/home/azureuser/csv:/home/ushio/.goenv/versions/1.13.4/bin:/home/ushio/.goenv/shims:/home/ushio/.goenv/bin:/home/ushio/.anyenv/bin:/home/ushio/.vscode-server/bin/8795a9889db74563ddd43eb0a897a2384129a619/bin:/home/ushio/.goenv/versions/1.13.4/bin:/home/ushio/.goenv/shims:/home/ushio/.goenv/bin:/home/ushio/.anyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/ushio/dotnet:/usr/lib/jvm/java-8-openjdk-amd64/bin:/home/ushio/Codes/DevSecOps/EpiServer/StressTesting/apache-jmeter-5.2/bin:/home/ushio/go/1.13.4/bin:/home/ushio/dotnet:/usr/lib/jvm/java-8-openjdk-amd64/bin:/home/ushio/Codes/DevSecOps/EpiServer/StressTesting/apache-jmeter-5.2/bin:/home/ushio/go/1.13.4/bin
*/1 * * * * /home/ushio/Codes/DevSecOps/volley/playground/cron/foo.sh > /home/ushio/Codes/DevSecOps/volley/playground/cron/abc.log
```