web-dev-qa-db-ja.com

/etc/profile.d/から実行されたときのスクリプトの奇妙な動作

ユーザーがログインした後、システム起動時に一連のプロセスを自動実行しようとしています。いくつかのプロセスを開始するために使用するcreate_processes.pyスクリプトを次に示します。

#!/usr/bin/python
import subprocess 

def f1():
    while True:
        time.sleep(2)
        print "I'm alive"
if len(sys.argv) < 2:
    print "assuming main"
    subprocess.Popen([""/usr/bin/python",sys.argv[0],"f1"])
Elif sys.argv[1] =="f1":
    f1()

直接呼び出すか、Nohup python create_processes.py 2>&1 &すべてが正常に動作します。

/etc/profile.d/フォルダー内のスクリプトによって呼び出されて実行しようとすると、問題が発生します。このようなスクリプトには、上記のコマンドが含まれています。 psを使用して、子供を見つけることができなくなりました。そのような状況ではどうなりますか?

お時間をいただきありがとうございます。英語が苦手です。

1
Gabrio

/etc.profile.d/内のファイルは、/etc/profileの実行時に取得されます。

/etc/profileの関連する行は次のとおりです。

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

この行から、名前が.shで終わるファイルのみが供給されることがわかります。

カスタムファイルの名前が.shで終わっていない場合は、それに応じて名前を変更してください。そうしないと、ソースになりません。

0
mook765