回答編集履歴
10
コメントより
test
CHANGED
@@ -34,4 +34,41 @@
|
|
34
34
|
上記の「別の方法としては、…」のような、起動中にsystemdに環境変数を設定する方法の方が良いと思います。
|
35
35
|
また、systemdがNode-REDを起動させる前に、systemdに環境変数を設定するサービスを作っても良いと思いますが、noderedのために環境変数を一つ追加するだけであれば、nodered.service の```ExecStartPre=```で、systemdに環境変数を設定するだけで十分だと思います。
|
36
36
|
|
37
|
+
---
|
38
|
+
コメントより
|
39
|
+
/lib/systemd/system/nodered.service の内容を調べてみましたが、ユーザー権限で実行するみたいですね。確認してなくてすみません。。
|
37
40
|
|
41
|
+
Node-REDの環境変数の設定方法について調べてみたら、以下のページが見つかりました。
|
42
|
+
|
43
|
+
環境変数を利用する : Node-RED日本ユーザ会
|
44
|
+
https://nodered.jp/docs/user-guide/environment-variables
|
45
|
+
|
46
|
+
「Node-REDユーザディレクトリ```~/.node-red```内の```environment```という名称のファイル内に配置することで定義できます。」とありました。
|
47
|
+
しかし、このenvironmentファイルでもシェルが実行されないと思われるため
|
48
|
+
|
49
|
+
以下のようにnodered.serviceを起動する前に、~/.node-red/environment を更新するサービスを作成
|
50
|
+
|
51
|
+
/etc/systemd/system/myip-in-nodered.service
|
52
|
+
``` ini
|
53
|
+
[Unit]
|
54
|
+
Description=Update or Add MYIP in ~/.node-red/environment
|
55
|
+
Before=nodered.service
|
56
|
+
|
57
|
+
[Service]
|
58
|
+
Type=oneshot
|
59
|
+
# ~/.node-red/environment にMYIPを設定
|
60
|
+
ExecStart=/bin/sh -c "if grep -q MYIP <homeディレクトリ>/.node-red/environment; then sed -i 's/MYIP=.*/MYIP=$(hostname -I)/g' <homeディレクトリ>/.node-red/environment; else echo MYIP=$(hostname -I) >> <homeディレクトリ>/.node-red/environment; fi"
|
61
|
+
User=<ユーザー名>
|
62
|
+
Group=<グループ名>
|
63
|
+
|
64
|
+
[Install]
|
65
|
+
WantedBy=multi-user.target
|
66
|
+
```
|
67
|
+
|
68
|
+
``` shell
|
69
|
+
$ sudo systemctl enable myip-in-nodered
|
70
|
+
```
|
71
|
+
|
72
|
+
このような方法で、できないでしょうか。
|
73
|
+
上記実行する場合、/lib/systemd/system/nodered.service に ```EnvironmentFile=-<ホームディレクトリ>/.node-red/environment```
|
74
|
+
が設定されているか確認してください。
|
9
回答の修正
test
CHANGED
@@ -28,24 +28,7 @@
|
|
28
28
|
|
29
29
|
また、nodered.service が起動する前に /etc/environment を変更するサービスを作れたとしても、/etc/environment を変更する前に /etc/environment の環境変数が適用されてしまう可能性があります。
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
``` ini
|
34
|
-
[Unit]
|
35
|
-
Description= Update or Add MYIP in /etc/environment
|
36
|
-
Before=shutdown.target
|
37
|
-
DefaultDependencies=no
|
38
|
-
|
39
|
-
[Service]
|
40
|
-
Type=oneshot
|
41
|
-
ExecStart=</etc/environmentを更新するスクリプトのパス>
|
42
|
-
TimeoutStartSec=0
|
43
|
-
|
44
|
-
[Install]
|
45
|
-
WantedBy=shutdown.target
|
46
|
-
```
|
47
|
-
|
48
|
-
しかし、/etc/environment は pam_env.so によってログイン時に読み込まれますが、これについての情報が少ない上に私はPAMについて詳しくないため断言はできないですが、再起動やログインをせずに起動中に/etc/environment を即座に適用する方法はおそらくないです。(そもそもPAM自体、ユーザ認証のためのものですから、ログイン後に使われる環境変数のために /etc/environment が存在するのでしょう。)
|
31
|
+
さらに言えば、nodered.service が起動する前に、/etc/environment が適用される保証はありません。起動時のいつどこでログイン(pam認証)されているかが不明瞭なためです。/etc/environment は pam_env.so によってログイン時に読み込まれますが、これについての情報が少ない上に私はPAMについて詳しくないため断言はできないですが、再起動やログインをせずに起動中に/etc/environment を適用する方法はおそらくないです。(そもそもPAM自体、ユーザ認証のためのものですから、ログイン後に使われる環境変数のために /etc/environment が存在するのでしょう。)
|
49
32
|
したがって、/etc/environment で設定するのは好ましくないです。
|
50
33
|
|
51
34
|
上記の「別の方法としては、…」のような、起動中にsystemdに環境変数を設定する方法の方が良いと思います。
|
8
修正
test
CHANGED
@@ -28,9 +28,6 @@
|
|
28
28
|
|
29
29
|
また、nodered.service が起動する前に /etc/environment を変更するサービスを作れたとしても、/etc/environment を変更する前に /etc/environment の環境変数が適用されてしまう可能性があります。
|
30
30
|
|
31
|
-
基本的に、起動中に /etc/environment を変更して適用するのはできないと考えていいです。できたとしても好ましくありません。上記の「別の方法としては、…」のような、起動中にsystemdに環境変数を設定する方法の方が良いと思います。
|
32
|
-
また、systemdがNode-REDを起動させる前に、systemdに環境変数を設定するサービスを作っても良いと思いますが、noderedのために環境変数を一つ追加するだけであれば、nodered.service の```ExecStartPre=```で、systemdに環境変数を設定するだけで十分だと思います。
|
33
|
-
|
34
31
|
また、どうしても /etc/environment を利用したいのであれば、以下のような、シャットダウン時に /etc/environment を更新するサービスを作ると良いでしょう
|
35
32
|
|
36
33
|
``` ini
|
@@ -48,3 +45,10 @@
|
|
48
45
|
WantedBy=shutdown.target
|
49
46
|
```
|
50
47
|
|
48
|
+
しかし、/etc/environment は pam_env.so によってログイン時に読み込まれますが、これについての情報が少ない上に私はPAMについて詳しくないため断言はできないですが、再起動やログインをせずに起動中に/etc/environment を即座に適用する方法はおそらくないです。(そもそもPAM自体、ユーザ認証のためのものですから、ログイン後に使われる環境変数のために /etc/environment が存在するのでしょう。)
|
49
|
+
したがって、/etc/environment で設定するのは好ましくないです。
|
50
|
+
|
51
|
+
上記の「別の方法としては、…」のような、起動中にsystemdに環境変数を設定する方法の方が良いと思います。
|
52
|
+
また、systemdがNode-REDを起動させる前に、systemdに環境変数を設定するサービスを作っても良いと思いますが、noderedのために環境変数を一つ追加するだけであれば、nodered.service の```ExecStartPre=```で、systemdに環境変数を設定するだけで十分だと思います。
|
53
|
+
|
54
|
+
|
7
文法の修正
test
CHANGED
@@ -26,12 +26,12 @@
|
|
26
26
|
systemd unit ファイルの書き方が間違っています。
|
27
27
|
```ExecStartPre=```ではなく、```ExecStart=```にするべきです。
|
28
28
|
|
29
|
-
また、nodered.serviceが起動する前に
|
29
|
+
また、nodered.service が起動する前に /etc/environment を変更するサービスを作れたとしても、/etc/environment を変更する前に /etc/environment の環境変数が適用されてしまう可能性があります。
|
30
30
|
|
31
|
-
基本的に、起動中に/etc/environment を変更して適用するのはできないと考えていいです。できたとしても好ましくありません。上記の「別の方法としては、…」のような、起動中にsystemdに環境変数を設定する方法の方が良いと思います。
|
31
|
+
基本的に、起動中に /etc/environment を変更して適用するのはできないと考えていいです。できたとしても好ましくありません。上記の「別の方法としては、…」のような、起動中にsystemdに環境変数を設定する方法の方が良いと思います。
|
32
32
|
また、systemdがNode-REDを起動させる前に、systemdに環境変数を設定するサービスを作っても良いと思いますが、noderedのために環境変数を一つ追加するだけであれば、nodered.service の```ExecStartPre=```で、systemdに環境変数を設定するだけで十分だと思います。
|
33
33
|
|
34
|
-
また、どうしても/etc/environmentを利用したいのであれば、以下のようなシャットダウン時に/etc/environment を更新するサービスを作ると良いでしょう
|
34
|
+
また、どうしても /etc/environment を利用したいのであれば、以下のような、シャットダウン時に /etc/environment を更新するサービスを作ると良いでしょう
|
35
35
|
|
36
36
|
``` ini
|
37
37
|
[Unit]
|
6
少し修正
test
CHANGED
@@ -35,7 +35,7 @@
|
|
35
35
|
|
36
36
|
``` ini
|
37
37
|
[Unit]
|
38
|
-
Description=
|
38
|
+
Description= Update or Add MYIP in /etc/environment
|
39
39
|
Before=shutdown.target
|
40
40
|
DefaultDependencies=no
|
41
41
|
|
5
更に追記
test
CHANGED
@@ -31,4 +31,20 @@
|
|
31
31
|
基本的に、起動中に/etc/environment を変更して適用するのはできないと考えていいです。できたとしても好ましくありません。上記の「別の方法としては、…」のような、起動中にsystemdに環境変数を設定する方法の方が良いと思います。
|
32
32
|
また、systemdがNode-REDを起動させる前に、systemdに環境変数を設定するサービスを作っても良いと思いますが、noderedのために環境変数を一つ追加するだけであれば、nodered.service の```ExecStartPre=```で、systemdに環境変数を設定するだけで十分だと思います。
|
33
33
|
|
34
|
+
また、どうしても/etc/environmentを利用したいのであれば、以下のようなシャットダウン時に/etc/environment を更新するサービスを作ると良いでしょう
|
34
35
|
|
36
|
+
``` ini
|
37
|
+
[Unit]
|
38
|
+
Description= Description=Update or Add MYIP in /etc/environment
|
39
|
+
Before=shutdown.target
|
40
|
+
DefaultDependencies=no
|
41
|
+
|
42
|
+
[Service]
|
43
|
+
Type=oneshot
|
44
|
+
ExecStart=</etc/environmentを更新するスクリプトのパス>
|
45
|
+
TimeoutStartSec=0
|
46
|
+
|
47
|
+
[Install]
|
48
|
+
WantedBy=shutdown.target
|
49
|
+
```
|
50
|
+
|
4
誤字修正
test
CHANGED
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
また、nodered.serviceが起動する前に、/etc/environmentの変更するサービスを作れたとしても、/etc/environmentを変更する前に/etc/environmentの環境変数が適用されてしまう可能性があります。
|
30
30
|
|
31
|
-
基本的に、/etc/environment を変更するのはできないと考えていいです。できたとしても好ましくありません。上記の「別の方法としては、…」のような、起動中にsystemdに環境変数を設定する方法の方が良いと思います。
|
31
|
+
基本的に、起動中に/etc/environment を変更して適用するのはできないと考えていいです。できたとしても好ましくありません。上記の「別の方法としては、…」のような、起動中にsystemdに環境変数を設定する方法の方が良いと思います。
|
32
32
|
また、systemdがNode-REDを起動させる前に、systemdに環境変数を設定するサービスを作っても良いと思いますが、noderedのために環境変数を一つ追加するだけであれば、nodered.service の```ExecStartPre=```で、systemdに環境変数を設定するだけで十分だと思います。
|
33
33
|
|
34
34
|
|
3
追記2より
test
CHANGED
@@ -9,6 +9,8 @@
|
|
9
9
|
# MYIP変更
|
10
10
|
sed -i "s/MYIP=.*/MYIP=$(hostname -I)/g" /etc/environment
|
11
11
|
```
|
12
|
+
|
13
|
+
|
12
14
|
別の方法としては、
|
13
15
|
/lib/systemd/system/nodered.service の中身の、ExecStartPreを以下のように設定すると良いと思います
|
14
16
|
``` ini
|
@@ -16,5 +18,17 @@
|
|
16
18
|
ExecStartPre=/bin/sh -c "/bin/systemctl set-environment MYIP=$(/bin/hostname -I)"
|
17
19
|
```
|
18
20
|
このようにすると、systemdがNode-REDを起動させる前に、systemdに環境変数MYIPを「/bin/hostname -I」のコマンドの結果に設定するシェルが実行されます。
|
21
|
+
これであればNode-REDを起動させる前に、(/bin/hostname -I) の結果がsystemd で適用され、Node-REDとそれ以降に起動したサービスでこの環境変数が使えます。
|
22
|
+
|
23
|
+
---
|
24
|
+
追記2より
|
25
|
+
|
26
|
+
systemd unit ファイルの書き方が間違っています。
|
27
|
+
```ExecStartPre=```ではなく、```ExecStart=```にするべきです。
|
28
|
+
|
29
|
+
また、nodered.serviceが起動する前に、/etc/environmentの変更するサービスを作れたとしても、/etc/environmentを変更する前に/etc/environmentの環境変数が適用されてしまう可能性があります。
|
30
|
+
|
31
|
+
基本的に、/etc/environment を変更するのはできないと考えていいです。できたとしても好ましくありません。上記の「別の方法としては、…」のような、起動中にsystemdに環境変数を設定する方法の方が良いと思います。
|
32
|
+
また、systemdがNode-REDを起動させる前に、systemdに環境変数を設定するサービスを作っても良いと思いますが、noderedのために環境変数を一つ追加するだけであれば、nodered.service の```ExecStartPre=```で、systemdに環境変数を設定するだけで十分だと思います。
|
19
33
|
|
20
34
|
|
2
少し修正
test
CHANGED
@@ -15,6 +15,6 @@
|
|
15
15
|
[Service]
|
16
16
|
ExecStartPre=/bin/sh -c "/bin/systemctl set-environment MYIP=$(/bin/hostname -I)"
|
17
17
|
```
|
18
|
-
こ
|
18
|
+
このようにすると、systemdがNode-REDを起動させる前に、systemdに環境変数MYIPを「/bin/hostname -I」のコマンドの結果に設定するシェルが実行されます。
|
19
19
|
|
20
20
|
|
1
少し修正
test
CHANGED
@@ -15,6 +15,6 @@
|
|
15
15
|
[Service]
|
16
16
|
ExecStartPre=/bin/sh -c "/bin/systemctl set-environment MYIP=$(/bin/hostname -I)"
|
17
17
|
```
|
18
|
-
これは、Node-REDを起動
|
18
|
+
これは、systemdがNode-REDを起動させる前に、systemdに環境変数MYIPを「/bin/hostname -I」のコマンドの結果に設定するシェルが実行されます。
|
19
19
|
|
20
20
|
|