ターミナルでpythonスクリプトを実行すると、期待どおりに実行されます。ファイルをダウンロードし、目的の場所に保存します。
Sudo python script.py
ルートcrontabにpythonスクリプトを追加しましたが、ファイルを書き込まないことを除いて、想定どおりに実行されます。
$ Sudo crontab -l
> * * * * * python /home/test/script.py >> /var/log/test.log 2>&1
以下は、まだ問題がある単純化されたスクリプトです。
#!/usr/bin/python
scheduleUrl = 'http://test.com/schedule.xml'
schedule = '/var/test/schedule.xml'
# Download url and save as filename
def wget(url, filename):
import urllib2
try:
response = urllib2.urlopen(url)
except Exception:
import traceback
logging.exception('generic exception: ' + traceback.format_exc())
else:
print('writing:'+filename+';')
output = open(filename,'wb')
output.write(response.read())
output.close()
# Download the schedule
wget(scheduleUrl, schedule)
「writing:name of file;」というメッセージが表示されます。 cronエントリが出力するログ内。しかし、実際のファイルはどこにも見つかりません...
Dir/var/testは777にchmoddedされ、どのユーザーを使用しても、必要に応じてファイルを追加および変更できます。
grep -i cron /var/log/syslog
2>&1
を削除します。有用なエラーは、作成されていないファイルにリダイレクトされます。事実上失われた。mutt
または/var/spool/mail
を使用)。デフォルトでは、cronからのエラーメッセージはシステムの電子メールに送信されます。また:
クロンタブ
#Borrowed from anacron
Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#End borrowed from anacron
* * * * * python /home/username/somedir/test.py
Pythonスクリプト
scheduleUrl = 'http://example.com/index.html'
schedule = '/tmp/test.html'
# Download url and save as filename
def wget(url, filename):
import urllib2
try:
response = urllib2.urlopen(url)
except Exception:
import logging
logging.exception('error')
else:
print('writing:'+filename+';')
output = open(filename,'wb')
output.write(response.read())
output.close()
# Download the schedule
wget(scheduleUrl, schedule)
環境変数を追加しました。 varの代わりにtmpを使用して、アクセス許可の問題がないことを確認しました。
同様の問題がありました:
f = open('./my_file.txt', 'w')
f.close()
Cronから実行したときにファイルを開いたり書き込んだりしていませんでした。これで解決しました
f = open('<full_path_of_file>/my_file.txt', 'w')
f.close()
私にとって解決策は、ファイルアクセスモードを変更するのと同じくらい簡単でした。の代わりに:
output = open(filename,'wb')
試してください:
output = open(filename,'rb+')
これを使用して、求人情報のクレイグリストをスクレイプし(自分用)、データベースにモデル化しました。すべてラズベリーパイで行われます。
私はこれを見つけました、そして、それは私が持っていた問題に非常に似ています、しかし、私はここから私の答えを全く得ませんでした。 cronジョブは実行されていましたが、pythonスクリプトは、cronジョブを介して実行されたときにファイルを書き込みませんでした。スクリプトは、コマンドラインから実行された場合、Webスクレイピングテキストファイルを書き込みます。
私にとっての解決策は、単にwb
からrb+
rb+
でした。バイナリ形式で読み取りと書き込みの両方のためにファイルを開きます。ファイルの先頭に配置されたファイルポインター。