2016-05-03 3 views
0

У меня есть скрипт python, который выполняется cron, он предназначен для управления сообщениями от пользователей к другим пользователям. Эти сообщения хранятся в базе данных mongodb. Скрипт просматривает сообщения, ищет целевое имя, извлекает его _id из db и сохраняет данные сообщения внутри массива сообщений пользователей. После этого сообщение удаляется из коллекции сообщений.Cron выполнение скрипта python не работает, как ожидалось

Если я выполняю скрипт python, все работает нормально, но если Cron запускает его, пользователь не будет обновлен, но сообщение будет удалено.

Сервер mongodb - 2.4.10, я знаю, что он старый, но это последний вариант, который работает на малине pi 2, afaik. версия питона 2.7.x

# ... 
# find all messages in messages collection 
cursorMsg = db.messages.find({}) 

# iterate over every key in cursor 
for keyMsg in cursorMsg: 
    body = keyMsg["body"] 
    about = keyMsg["about"] 
    created_at = keyMsg["created_at"] 
    sender_id = keyMsg["sender_id"] 
    cursorUsrSender = db.users.find({"_id": str(sender_id)}) 
    sender_name = keyMsg["sender_name"] 
    sender_id = keyMsg["sender_id"] 
    to = keyMsg["to"] 
    _id = str(keyMsg["_id"]) 

    # find the user for the message 
    cursorUsrTarget = db.users.find({"username": to}) 
    for keyUsrTarget in cursorUsrTarget: 
     print(keyUsrTarget) 
     usr_target_id = str(keyUsrTarget["_id"]) 
     print(type(keyUsrTarget["messages"])) 
     new_message = { 
      "_id": _id, 
      "created_at": created_at, 
      "about": about, 
      "body": body, 
      "sender_id": sender_id, 
      "sender_name": sender_name, 
      "target_id": usr_target_id 
     } 
     # save the message 
     keyUsrTarget["messages"].append(new_message) 
     db.users.save(keyUsrTarget) 
     # delete the message from message collection 
     db.messages.remove({"_id": keyMsg["_id"]}) 

Есть ли способ, чтобы ждать ответа команды сохранения или любым другим способом, чтобы выполнить команду удаления после успешного сохранения?

самосвала:

{u'username ': u'test', u'hash ': и' $ 2a $ 10 $ Irwx.S5gwpOOB/gAxHPAv.Fpge9i6H.mEIh.RrAwfLp.qboZwm2sq», U 'firstName': u'test ', u'lastName': u'test ', u'schiffe': [{u'kriegsschiffe ': {u'galleone': u'0 ', u'karacken': u'0 '}}, {u'handelsschiffe': {u'koggen ': u'0', u'schoner ': u'0'}}], u'messages ': [], u'fresh_account': u'false ', u'test': u'0 ', u'islands': [{u'buildings ': {u'resource_stores': [{u'capacity ': u'1', u'level ': u'1 ', u'max_capacity': u'1000 ', u'attack': u'100 ', u'health': u'100 ', u'type': u'Holzspeicher '}, {u'capacity': u '1', u'level ': u'1', u'max_capacity ': u'1000', u'attack ': u'100', u'health ': u'100', u'type ': u 'Steinspeicher'}, {u'capacity ': u'1', u'level ': u'1', u'max_capacity ': u '1000', u'attack ': u'100', u'health ': u'100', u'type ': u'Eisenspeicher'}, {u'capacity ': u'1', u'level ' : u'1 ', u'max_capacity': u'1000 ', u'attack': u'100 ', u'health': u'100 ', u'type': u'Nahrungsspeicher '}], u' main_buildings ': [{u'type': u'Hauptgeb \ xe4ude ', u'attack': u'100 ', u'health': u'100 ', u'level': u'1 '}, {u 'type': u'S \ xe4gewerk ', u'attack': u'100 ', u'health': u'100 ', u'level': u'1 '}, {u'type': u'Steinbruch ' , u'attack ': u'100', u'health ': u'100', u'level ': u'1'}, {u'type ': u'Schmelzofen', u'attack ': u' 100 ', u'health': u'100 ', u'level': u'1 '}, {u'type': u'M \ xfchle ', u'attack': u'100 ', u'health ': u'100', u'level ': u'1'}, {u'type ': u'Hafen', u'attack ': u'100', u'health ': u'100', u 'level': u'1 '}, {u'type': u'Forschungsgeb \ xe4ude ', u'attack': u'100 ', u'health': u'100 ', u'level': u ' 1 '}, {u'type': u'Handelsdepot ', u'attack': u'100 ', u'health': u'100 ', u'level': u'1 '}, {u'type ': u'Fort', u'attack ': u'100', u'health ': u'100', u'level ': u'1'}]}, u'island_name ': u'Insel 19' , u'координирует ': { u'y ': 450, u'x': 250}, u'ocean ': 0, u'shape': 67, u'owner ': u'test', u'_id ': u'57246661e844a270258159f1'}] , u'_id ': ObjectId (' 57283a079d3a22c819ca8600 ')} Сообщение отправлено пользователю. Сообщение удалено из коллекции.

кронтаб

*/1 * * * * pi (python /home/py/menage_messages.py >> /home/log/messages.log) 
+0

Возможно ли, что существует какое-то состояние гонки? Но я не понимаю, что скрипт работает хорошо, если я начинаю его вручную. Проблема возникает, когда cron выполняет скрипт. – ronald

+0

можно записать результат cron в текстовый файл и посмотреть, что такое wronge. '* * * * */полный/путь/из/ваш/скрипт.py> text_dump', плюс убедитесь, что у вас полный путь –

+0

Привет, @ronald, вы это пробовали? http://askubuntu.com/questions/23009/reasons-why-crontab-does-not-work –

ответ

0

Cron задания выполняются в другой среде по сравнению с окружающей средой, где вы выполнить скрипт вручную. Как показано в приведенном выше комментарии, вы можете попробовать перенаправить stdout и stderr в файл и посмотреть, что происходит с запуском скрипта в качестве задания cron.

+0

Я думаю, что я нашел проблему, есть еще один cronjob, который запускает и обновляет некоторые другие поля в пользовательской коллекции. – ronald

Смежные вопросы