私はnohup ./myprogram.py 1>console.out &
でバックグラウンドで実行されているpythonスクリプトを持っています。プログラムは常にいくつかのログファイルにロギングしており、処理は長いです。 2日(土曜日と日曜日)のために実行した後、私はMYPROGRAM私のプログラムの終了の理由
2016-05-27 16:55:06 - sources.edf - INFO - processing day 1 ...
2016-05-27 16:55:06 - sources.edf - INFO - processing day 2 ...
...
2016-05-27 16:55:06 - sources.edf - INFO - processing day n ...
ため
# myprogram and myprogram2 are both running in background
# myprogram2 clearly has finished
[1] + 25159 exit 1 nohup ./myprogram.py 1>console.out &
[2] + 25442 done nohup ./myprogram2.py 1>console2.out &
ログを参照し、停止した(N + 1とそれ以上が存在する必要があります)。
悲しいことに、私はすでにconsole.outで上書きしてしまっています(見た目になる前に上書きするようにダンプします...)しかし、n日後もプログラムはエラー/例外なしで実行できるようです。
私はこの説明がちょっとあまりにも漠然としていて、この出口の理由を指摘していることを知っています。私はちょうどこれについていくつかの手掛かりを知る必要があります。私はこれに完全に新しいですが、私は経験が不足しています。ですから、可能な限りの推測は認められます。
が簡略化されたソースコード:
import os
import sys
import logging
import logging.config as lconfig
from optparse import OptionParser
from contextlib import closing
from datetime import datetime, timedelta
from collections import defaultdict
import psycopg2
from configobj import ConfigObj
if __name__ == "__main__":
## setup optparser and parse argvs and return opts and args
conf = ConfigObj(opts.config, list_values=False)[args[0]]
__import__(conf["module"])
## myprogram and myprogram2 is running the same source code
## same module. only the data is different
## source will provide Mapper and iterator as APIs
source = sys.modules[conf["module"]]
## extract start and end date, configure log
# set up regions info and mapper
## connect to db and read countries and exchange list
with closing(psycopg2.connect(conf["dsn"])) as db:
cursor = db.cursor()
regions = source.setup_region(conf['Regions'], cursor)
## find all wanted exchanges: (exch, region)
exchanges = source.setup_exchanges(conf['Exchanges'], cursor)
mapper = source.Mapper(exchanges, cursor, conf)
iterator = source.iterator(conf, start, end)
logger = logging.getLogger()
logger.info('START')
with regions:
for filename, raw_rec in iterator:
logger.info('Processing file {0}'.format(filename)
try:
record = source.Record(filename, raw_rec)
except Exception as e:
logger.warn("record parsing error: %s" % e)
continue
stks = mapper.find(record)
if not stks:
continue
regs = defaultdict(set)
for stk in stks:
regnm = exchanges[stk[2]]
regs[regnm].add(stk)
for reg,secs in regs.iteritems():
info = regions[reg]
outf = info.get_file(record.get_tm())
source.output(outf, record, secs, info.tz, conf)
logger.info('END')
ログはちょうどPrccessingとして、いくつかのファイルを停止...
で始めることができますか? – SilentMonk
@SilentMonk、ここに投稿するには長すぎます。 –
Log * stderr *( '2>')も簡略化しようとしています。 – pacholik