У меня есть скрипт 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)
Возможно ли, что существует какое-то состояние гонки? Но я не понимаю, что скрипт работает хорошо, если я начинаю его вручную. Проблема возникает, когда cron выполняет скрипт. – ronald
можно записать результат cron в текстовый файл и посмотреть, что такое wronge. '* * * * */полный/путь/из/ваш/скрипт.py> text_dump', плюс убедитесь, что у вас полный путь –
Привет, @ronald, вы это пробовали? http://askubuntu.com/questions/23009/reasons-why-crontab-does-not-work –