/home/pi/logs_rrdにログを保存するはずの/home/pi/update_rrd_data.pyにpythonスクリプトがあります。Python os.path.join()がcronジョブを使用しているときに正しく結合していません
これは私がそれを実現してきた方法です:
current_folder = os.path.dirname(os.path.abspath(inspect.stack()[0][1]))
log_folder = os.path.join(current_folder, 'logs_rrd')
if not os.path.exists(log_folder): os.makedirs(log_folder)
file_name = __file__[:-3] + '_' + datetime.strftime(datetime.now(), '%Y%m%d%H%M') + '.log'
log_file = os.path.join(log_folder, file_name)
logging.basicConfig(filename=log_file, level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(filename)s->%(funcName)s:%(message)s', datefmt='%m/%d/%Y_%I:%M:%S_%p')
logging.info('\nCurrent Folder: {}\nLog Folder: {}\nLog File: {}'.format(current_folder, log_folder, log_file))
私は手動でスクリプトを実行すると、それが正常に動作し、これは私が家/ PI/logs_rrd/update_rrd_data_201709271426 /にあるログファイルに取得されるものです。ログ:
は 現在のフォルダ:/ホーム/ PI
ログフォルダ:/ホーム/ piが/
ログファイルをlogs_rrd:私はcronのようにそれを実行すると、しかし
を/home/pi/logs_rrd/update_rrd_data_201709271426.logジョブでは、ログファイルはsamに作成されますeフォルダをlogs_rrdフォルダの代わりにスクリプトとして保存します。
現在のフォルダ:/ホーム/ PI
ログフォルダ:/ホーム/ PI/logs_rrd
ログファイル:/ホーム/ PI/update_rrd_data_201709271445これは私が/home/pi/update_rrd_data_201709271445.logでログファイルに取得されるものです.log
ログフォルダの値が「OK」ですが、ログファイルがログフォルダのlogs_rrd部分を削除する理由を理解できません。
これは私がcronを実行する方法である:任意の書き込み権限の問題があってはならないので
*/5 * * * * /usr/bin/python /home/pi/update_rrd_data.py
すべてのフォルダとファイルは、rootによって所有されています。それが動作しない場合に
あなたは 'inspect.stack()[0] [1]'の代わりに '__file__'を使ってみましたか? – AndMar
@AndMarはい、しましたが、現在のフォルダは/ rootになります。また、現在のフォルダとログフォルダの値は正しいです。それは私が奇妙に動作し、 "logs_rrd"部分を削除するログフォルダにファイル名を組み合わせようとするときです。 – Rahul