J'ai un script python en arrière-plan avec nohup ./myprogram.py 1>console.out &
. Le programme est constamment connecté à un fichier journal et le traitement est long. Après avoir exécuté pendant 2 jours (samedi et dimanche), je voisla raison de la sortie de mon programme
# 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 &
Le journal 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 ...
et arrêté (il devrait y avoir n + 1 et plus). Malheureusement, j'ai juste écrasé sur console.out déjà (donc dump à écraser dessus avant même que je regarde ... mais je continuais à partir du jour n et semble que le programme peut être exécuté sans aucune erreur/exception)
Je sais que cette description est un peu ou simplement trop vague pour indiquer une raison quelconque pour cette sortie. J'ai juste besoin de savoir quelque chose à ce sujet. Je ne suis pas complètement nouveau à ce sujet mais je manque d'expérience. Donc, toute estimation possible est appréciée.
Le code source simplifiée:
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')
Le journal juste arrêté comme Prccessing certains fichiers ...
Pouvez-vous poster myprogram.py et myprogram2.py? – SilentMonk
@SilentMonk, c'est juste un gros trop long pour poster ici. Je vais essayer de simplifier –
Log * stderr * ('2>') aussi et nous le saurons. – pacholik