私がstdoutを書き込むファイルがcronから実行されるたびに、ファイルは変更されますが、何も書き込まれません。ターミナルからスクリプトを実行している間。私は何をしようとしているのcronから実行されるpythonスクリプトでテキストファイルに書き込み
例:
run.py
#!/bin/python2
import os
os.chdir('/home/user')
import getsmart
import sendemail
getsmart.py
#!/bin/python2
from subprocess import call
import os
os.chdir('/home/user')
f = open("result", "w")
call(["sudo","smartctl", "-a", "/dev/sda"], stdout=f)
call(["sudo","smartctl", "-a", "/dev/sdb"], stdout=f)
sendmail.py
#!/bin/python2
# Import smtplib for the actual sending function
import smtplib
import os
# Import the email modules we'll need
from email.mime.text import MIMEText
os.chdir('/home/user')
# Open a plain text file for reading. For this example, assume that
# the text file contains only ASCII characters.
fp = open('result', 'rb')
# Create a text/plain message
msg = MIMEText(fp.read())
fp.close()
# me == the sender's email address
# you == the recipient's email address
msg['Subject'] = ''
msg['From'] = ''
msg['To'] = ''
# Send the message via our own SMTP server, but don't include the
# envelope header.
s = smtplib.SMTP('')
s.sendmail('', '', msg.as_string())
s.quit()
のcron
* * * * * /home/user/run.py
スクリプトが実行権を持っています。
-rwxr-xr-x. 1 user user 84 Jul 5 12:20 /home/user/run.py
私たちは、次のスクリプトが実行されているログで見ることができるように:
Jul 5 13:11:01 localhost CROND[10945]: (root) CMD (/home/giumbai/run.py)
私の理解のとおり問題が実行されたコマンドの出力が書き込まれる方法に関するものですstdout
に、またはstdout
からスクリプトを読み込む方法Pythonのドキュメントは私を助けてくれるわけではなく、wwwを検索することもありません。
あなたの例を使って試してみましたが、すべてを1つのファイルに入れようとしましたが、同じ結果が得られます。ターミナルからスクリプトを実行すると動作しますが、cronがスクリプトを実行するときに結果ファイルは空です。 –
ええと、それは環境問題を示唆しています。私はその情報も含めて答えを調整します。 –
私は 'sudo'を削除し、' smartctl'へのパスを挿入した後、すべてが機能しました。私がこれをやろうとする前に、他のサーバでも同様のことをしていた古いbashスクリプトをテストしたところ、同じ問題が発生していたことは驚きでした。 :D –