次のコード スニペット (init.d 環境で動作することを意味します) では、test.ClassPath を実行したいと思います。ただし、ユーザーの .bashrc で定義されているように CLASSPATH 環境変数を設定して渡すのに問題があります。
ここに私の欲求不満の原因があります:
- 以下のスクリプトを使用モードで実行すると、CLASSPATH OK が出力されます ($HOME/.bashrc から)。
- rootとして実行すると、CLASSPATHも正常に表示されます(CLASSPATHで/etc/bash.bashrcを設定しました)
- しかし、「sudo script.py」を実行すると(init.dの起動時に何が起こるかをシミュレートするため)、CLASSPATHがありません!!
CLASSPATH は非常に大きいので、ファイルから読み取りたいと思います.. $HOME/.classpath と言います
#!/usr/bin/python
import subprocess
import os.path as osp
import os
user = "USERNAME"
logDir = "/home/USERNAME/temp/"
print os.environ["HOME"]
if "CLASSPATH" in os.environ:
print os.environ["CLASSPATH"]
else:
print "Missing CLASSPATH"
procLog = open(osp.join(logDir, 'test.log'), 'w')
cmdStr = 'sudo -u %s -i java test.ClassPath'%(user, ) # run in user
proc = subprocess.Popen(cmdStr, shell=True, bufsize=0, stderr=procLog, stdout=procLog)
procLog.close()