何をやりたいか? †
- glassfish (JavaEEサーバ) から、LSF (IBMのクラウドJOB管理ミドル) に 科学計算JOB を投入するシステムを作りたい
- そのためには、glassfish が動いているプロセスに、LSF を実行するための環境変数を設定する必要がある
- → glassfish を起動するための systemd unit ファイルで環境変数ってどう設定すりゃいいんだっけ?
環境変数を設定しない systemd unit ファイル †
[正解] EnvironmentFile? を使う †
- /usr/lib/systemd/system/glassfish.service (編集後)
[Unit]
Description=GlassFish Server
After=network.target remote-fs.target
[Service]
Type=forking
PIDFile=/opt/glassfish4/glassfish/domains/domain1/config/pid
ExecStart=/opt/glassfish4/bin/asadmin start-domain
ExecReload=/opt/glassfish4/bin/asadmin restart-domain
ExecStop=/opt/glassfish4/bin/asadmin stop-domain
TimeoutStartSec=300
TimeoutStopSec=30
User=glassfish
EnvironmentFile=/etc/sysconfig/glassfish
[Install]
WantedBy=multi-user.target
- /etc/sysconfig/glassfish
MANPATH=/usr/share/lsf/10.1/man:
LSF_SERVERDIR=/usr/share/lsf/10.1/linux2.6-glibc2.3-x86_64/etc
LSF_LIBDIR=/usr/share/lsf/10.1/linux2.6-glibc2.3-x86_64/lib
LD_LIBRARY_PATH=/usr/share/lsf/10.1/linux2.6-glibc2.3-x86_64/lib
PATH=/usr/share/lsf/10.1/linux2.6-glibc2.3-x86_64/etc:/usr/share/lsf/10.1/linux2.6-glibc2.3-x86_64/bin:/sbin:/bin:/usr/sbin:/usr/bin
LSF_BINDIR=/usr/share/lsf/10.1/linux2.6-glibc2.3-x86_64/bin
LSF_ENVDIR=/usr/share/lsf/conf
このファイルは、
$ source /usr/share/lsf/conf/profile.lsf && env | grep lsf >> /etc/sysconfig/glassfish
で作る
[ダメ] ExecStartPre? では環境変数の設定はできない †
[Unit]
Description=GlassFish Server
After=network.target remote-fs.target
[Service]
Type=forking
PIDFile=/opt/glassfish4/glassfish/domains/domain1/config/pid
ExecStartPre=source /usr/share/lsf/conf/profile.lsf
ExecStart=/opt/glassfish4/bin/asadmin start-domain
ExecReload=/opt/glassfish4/bin/asadmin restart-domain
ExecStop=/opt/glassfish4/bin/asadmin stop-domain
TimeoutStartSec=300
TimeoutStopSec=30
User=glassfish
[Install]
WantedBy=multi-user.target
- ぢゃあかんの? → あきまへん
- ExecStartPre? は、/ ではじまるコマンドしか受け付けないので、source コマンドは実行できない
- というか source コマンドはシェルのビルトインコマンドなんで、シェルからうごいていないサービスで使えないのは当然
[注意] EnvironmentFile? 内では変数展開はされない †
Computer