Запланируйте сценарий Python в crontab на виртуальной машине Google Compute Engine

Я запланировал выполнение своего скрипта Python один раз в час, набрав crontab -e в оболочке, а затем добавив эту строку текста в файл cron:

0 * * * * /usr/bin/python /home/myUserName/automatedProject/test.py &>> /home/myUserName/automatedProject/log.txt

но независимо от того, какие варианты я пробую, он не выполняется.

В качестве тестового сценария я использую простой скрипт Джессики Юнг для добавления метки времени к файлу:

#! /usr/bin/env python
import time
filename = "record_time.txt"
current_time = time.strftime('%a %H:%M:%S')
with open(filename, 'a') as handle:
    handle.write(str(current_time))
    handle.write('\n')

Cron не работает как your username. Поэтому не пытайтесь получить доступ к файлам файлов на основе вашего домашнего каталога. Файл журнала cron зависит от дистрибутива Linux: ищите ошибки cron в /var/log/syslog. Это также может вам помочь: askubuntu.com/questions/418237/how-to-detect-error-in-cron-j‌​obs

John Hanley 26.01.2019 06:34

Привет @JohnHanley, я переместил все в /opt/*, но виртуальная машина Google Compute Engine по-прежнему не выполняет мое задание cron, даже когда я установил для параметров времени / даты cron значение * * * * * (все 5 параметров как «любые»)

Ryan Loggerythm 26.01.2019 19:10

Что вам показывают лог-файлы?

John Hanley 26.01.2019 21:19
cronделает запускает команды crontab под своим идентификатором пользователя. Обратите внимание, что этот скрипт Python записывает непосредственно в файл с именем record_time.txt в текущем каталоге, который должен быть вашим домашним каталогом. Проверьте этот файл, чтобы увидеть, выполняется ли команда. Скрипт ничего не печатает, поэтому редирект на log.txt ничего не соберет. (Всегда рекомендуется запускать команду вручную, прежде чем поместить ее в crontab, просто чтобы убедиться, что она ведет себя так, как вы ожидаете в обычных обстоятельствах.)
ottomeister 27.01.2019 06:29

Привет @ottomeister, спасибо за это. я понял, что это локальный путь, и изменил его на абсолютный путь. команда запускается вручную, но не запускается, когда она помещена в crontab.

Ryan Loggerythm 27.01.2019 23:51

Моему cron не нравится перенаправление &>>, потому что это синтаксис bash, а cron использует старый добрый sh для запуска заданий crontab. Попробуйте изменить это с &>> /path/to/logfile на >> /path/to/logfile 2>&1, что является традиционным способом sh сделать то же самое. Если это не поможет, давайте начнем с нуля и проверим, действительно ли работает служба cron (выполните ps -efa | grep cron).

ottomeister 28.01.2019 00:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
6
2 187
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Google Compute Engine с виртуальной машиной Ubuntu 16.04 задания cron на уровне пользователя, похоже, вообще не запускаются; однако задания корневого уровня работают должным образом.

Вместо редактирования crontab следующим образом:

crontab -e

используйте sudo crontab -e

Простой рабочий пример — * * * * * /usr/bin/python /home/myUserName/test.py для запуска test.py раз в минуту.

Другие вопросы по теме