前提・実現したいこと
下記の構成でpython(venv)およびシェルスクリプトをcronで動作させようとしています。
手動では問題なく実行できますが、cronではsubprocess.runで実行したシェルスクリプトの結果が受け取れない状況で行き詰っています。
確認点などありましたら、どなたかご教示いただけますと幸いです。
(補足)
slappasswdでパスワードを入力後に標準出力される[{SSHA}SPciK5sfizFS*******************]のような文字列を取得し、
リストに追加したいと考えています。
発生している問題・エラーメッセージ
+ expect -c ' spawn slappasswd expect "New password:" send "文字列\n" expect "Re-enter new password:" send "文字列\n" interact ; ' spawn slappasswd New password: Re-enter new password: None None Traceback (most recent call last): File "/hoge/hoge1/pytools/test.py", line 5, in <module> get_ssha() File "/hoge/hoge1/pytools/test.py", line 14, in get_ssha ssha_list.append(m.group()) AttributeError: 'NoneType' object has no attribute 'group'
該当のソースコード
python
1ssha_list = [] 2def get_ssha(): 3 for i in range(len(df)): 4 pw = str(df.loc[i, 'pw']) 5 uid = str(df.loc[i, 'uid']) 6 proc_ssha = subprocess.run(['bash', '-x' ,'/hoge/hoge1/pytools/test.sh', pw, uid], stdout=PIPE) 7 proc_ssha_stdout = str(proc_ssha.stdout.decode('utf-8')) 8 #print(proc_ssha_stdout) #{SSHA}SPciK5sfizFS*******************]が表示されない 9 #print(re.search("{SSHA}.*", proc_ssha_stdout)) #None 10 m = re.search('{SSHA}.*', proc_ssha_stdout) 11 #print(m) #None 12 ssha_list.append(m.group()) 13get_ssha()
bash
1#!/bin/sh 2 3pw=$1 4uid=$2 5 6expect -c " 7spawn slappasswd 8expect \"New password:\" 9send \"${pw}\n\" 10expect \"Re-enter new password:\" 11send \"${pw}\n\" 12interact ;
試したこと
・cronの記載を変えてみる
0 0 * * * /hoge/hoge1/venv/bin/python /hoge/hoge1/pytools/test.py >> /hoge/hoge1/pytools/cron.log 2>&1 0 0 * * * cd /hoge/hoge1/pytools && /hoge/hoge1/venv/bin/python test.py >> /hoge/hoge1/pytools/cron.log 2>&1
・cronの指定をpythonではなくシェルスクリプトにする
bash
1#!/bin/sh 2PATH=/hoge/hoge1/venv/bin:/sbin:/bin:/usr/sbin:/usr/bin 3source /hoge/hoge1/venv/bin/activate 4python /hoge/hoge1/pytools/test.py 5deactivate
補足情報(FW/ツールのバージョンなど)
cronで実行時のみシェルスクリプトの結果が受け取れないため、エラーログでも「AttributeError: 'NoneType' object has no attribute 'group'」が出力されていると思われます。
proc_ssha = subprocess.run(['bash', '-x' ,'/hoge/hoge1/pytools/test.sh', pw, uid], stdout=PIPE) proc_ssha_stdout = str(proc_ssha.stdout.decode('utf-8')) #print(proc_ssha_stdout) #{SSHA}SPciK5sfizFS*******************]が表示されない
回答1件
あなたの回答
tips
プレビュー