Запрос SQLite не работает в cronjob(производство)?

#python #python-3.x #database #sqlite #cron

Вопрос:

У меня есть запрос sqlite, написанный на python: dibbs5.py

 cursor.executemany ( """ INSERT INTO dibbs_spider_dibbs_fields(hash,nsn,nomenclature,technical_documents,solicitation, status,purchase_request,issued,return_by,file) VALUES (?,?,?,?,?,?,?,?,?,?) """ , records )  

Это прекрасно работает на местном уровне, в производстве, когда я выполняю это из терминала, он выполняется. Но когда я планирую это в cronjob, это показывает ошибку:

 cursor.executemany ( """ sqlite3.OperationalError: no such table: dibbs_spider_dibbs_fields  

Есть имя таблицы dibbs_spider_dibbs_fields

Кронтаб:

 31 09 * * * /usr/bin/python3 /root/spider/manage.py makemigrations gt; /root/spider/migration.log 2gt;amp;1 32 09 * * * /usr/bin/python3 /root/spider/manage.py migrate gt; /root/spider/migration2.log 2gt;amp;1 33 09 * * * DISPLAY=:0 /usr/bin/python3 /root/spider/dibbs5.py gt; /root/spider/dibbserorr3.log 2gt;amp;1  

Комментарии:

1. можете ли вы отобразить журналы?

2. Проверьте журналы в случае ошибки

3. также отобразите свои журналы миграции, похоже, что crontab не выполняет миграцию должным образом

4. Вам нужно будет добавить дополнительную информацию. Никто не может догадаться, что содержат ваши сценарии и т. Д. И почему вы выполняете миграции в задании cron?

5. проверьте, работает ли * * * * * ls /path/to/database.db gt; /dev/pts/0 (или чем бы tty вы ни занимались). если да, то проверьте * * * * * /usr/bin/python3 -c "from sqlite3 import connect as c;db=c('/path/to/database.db');dbc=db.cursor();r=dbc.execute('select name from sqlite_schema where type='table';').fetchone();print('tables:',r)" gt; /dev/pts/0 , отображается ли список таблиц. вероятно, даже первое не сработает. sqlite3 создает новый файл, если он не найден, и, вероятно, он не находит таблицу, потому что использует новую базу данных

Ответ №1:

Вы запустили dibbs5.py использование root в производственном терминале? Это работает? Если да, пожалуйста, измените кронтаб с помощью этой команды

 sudo crontab -u root -e  
 31 09 * * * /usr/bin/python3 /root/spider/manage.py makemigrations gt; /root/spider/migration.log 2gt;amp;1 32 09 * * * /usr/bin/python3 /root/spider/manage.py migrate gt; /root/spider/migration2.log 2gt;amp;1 33 09 * * * DISPLAY=:0 /usr/bin/python3 /root/spider/dibbs5.py gt; /root/spider/dibbserorr3.log 2gt;amp;1  

У меня такое чувство, что вы не редактируете crontab для root . Программа, с которой вы столкнулись, вызвана тем, что таблица отсутствует в файле, так как переменные среды не были правильно настроены, что привело к неправильному доступу к файлу.