Моя проблема решена: Я предоставил разрешение на выполнение скриптов Python, добавил файл cron.allow в каталог / etc / (вместе с файлом
содержащий единственную запись "пи", без кавычек, который является моим именем пользователя)
и предоставил полный путь к скрипту Python. Я не могу
определить, какое решение заставило его работать, поэтому благодаря glenn
Джекман и
Abhijit
Pritam .
У меня есть два сценария Python , которые выполняются a bash script . Поскольку я хочу, чтобы этот скрипт запускался каждые несколько часов, я настроил Cron Job . Работа сценария Bash ( run_awsscrubber.sh ) выглядит следующим образом:
- Настройка среды.
- Запишите время выполнения сценария Bash в два файла журнала (один для всех предыдущих запусков и один для этого прогона).
- Проверьте с помощью wget, работает ли IP-адрес или нет.
- Если его вверх:
- Запустите скрипт imd_aws_parse_rc4.py, запишите его вывод в переменную и запишите его в файлы журнала.
- Запустите скрипт gmail_run_alert.py, запишите его вывод в переменную и запишите его в файлы журнала.
- Очистить некоторые сгенерированные файлы
- Если не работает:
- Запустите скрипт gmail_run_alert.py, запишите его вывод в переменную и запишите его в файлы журнала.
- Очистить некоторые сгенерированные файлы
imd_aws_parse_rc4.py: код в этом сценарии очищает веб-сайт для получения информации с использованием Selenium WebDriver, Firefox, драйвера Gecko и Beautiful Soup и сохраняет проанализированные данные в виде CSV в файле.
gmail_run_alert.py: код этого скрипта отправляет файл CSV (если он существует) и текущий сгенерированный журнал ошибок по электронной почте на идентификатор.
Я использую Raspberry Pi 3 под управлением Raspbian Stretch.
Скрипт bash при запуске вручную может запускать оба скрипта python, но когда он запускается Cron, скрипты python не выполняются. Сценарии Bash и Python находятся в каталоге ~ / CronJobs, а их выходные данные хранятся в каталоге ~ / CronOutput
Ниже приведен код / вывод, который может быть полезен для поиска решения:
Содержимое задания Cron в каталоге /etc/cron.d и Разрешения для файлов
pi@RPI_IronHide:/etc/cron.d $ ls -al AWSScriptCJ
-rw-r--r-- 1 root root 53 May 1 16:56 AWSScriptCJ
pi@RPI_IronHide:/etc/cron.d $ cat AWSScriptCJ
*/2 * * * * pi /home/pi/CronJobs/run_awsscrubber.sh
Права доступа к файлам Bash Script и Python Scripts
pi@RPI_IronHide:~/CronJobs $ ls -al
total 28
-rw-rw-r-- 1 pi pi 2264 May 1 10:41 gmail_run_alert.py
-rw-rw-r-- 1 pi pi 7166 May 1 10:50 imd_aws_parse_rc4.py
-rwxr-xr-x 1 pi pi 1812 May 1 17:26 run_awsscrubber.sh
Разрешения каталогов CronJobs и CronOutput
pi@RPI_IronHide:~ $ ls -al
total 148
drwxr-xr-x 2 pi pi 4096 May 1 17:27 CronJobs
drwxr-xr-x 2 pi pi 4096 May 1 16:55 CronOutput
Содержимое файла журнала одиночного запуска
pi@RPI_IronHide:~/CronOutput $ cat AWS_Data_Scrub_Latest.log
Tue 1 May 17:56:01 IST 2018
LANG=en_GB.UTF-8
PWD=/home/pi
HOME=/home/pi
SHELL=/bin/bash
SHLVL=1
LOGNAME=pi
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/printenv
Script Begin!
Online
Removing geckodriver.log File
Removing aws_html.html File
Removing Single Run CSV File
Script End Success!
Cron Logs из / var / log / syslog
pi@RPI_IronHide:~ $ grep CRON /var/log/syslog | tail -10
May 1 17:48:01 RPI_IronHide CRON[2555]: (pi) CMD (/home/pi/CronJobs/RunACronTask.sh)
May 1 17:48:01 RPI_IronHide CRON[2556]: (pi) CMD (/home/pi/CronJobs/run_awsscrubber.sh)
May 1 17:50:01 RPI_IronHide CRON[2590]: (pi) CMD (/home/pi/CronJobs/run_awsscrubber.sh)
May 1 17:50:01 RPI_IronHide CRON[2591]: (pi) CMD (/home/pi/CronJobs/RunACronTask.sh)
May 1 17:52:01 RPI_IronHide CRON[2625]: (pi) CMD (/home/pi/CronJobs/RunACronTask.sh)
May 1 17:52:01 RPI_IronHide CRON[2626]: (pi) CMD (/home/pi/CronJobs/run_awsscrubber.sh)
May 1 17:54:01 RPI_IronHide CRON[2675]: (pi) CMD (/home/pi/CronJobs/run_awsscrubber.sh)
May 1 17:54:01 RPI_IronHide CRON[2674]: (pi) CMD (/home/pi/CronJobs/RunACronTask.sh)
May 1 17:56:01 RPI_IronHide CRON[2725]: (pi) CMD (/home/pi/CronJobs/run_awsscrubber.sh)
May 1 17:56:01 RPI_IronHide CRON[2726]: (pi) CMD (/home/pi/CronJobs/RunACronTask.sh)
Содержимое скрипта Bash
pi@RPI_IronHide:~/CronJobs $ cat run_awsscrubber.sh
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
MAILTO=""
LOG_FILE_N="/home/pi/CronOutput/AWS_Data_Scrub.log"
CURR_LOG_FILE="/home/pi/CronOutput/AWS_Data_Scrub_Latest.log"
echo $(/bin/date) >> $LOG_FILE_N
printenv >> $LOG_FILE_N
echo $(/bin/date) > $CURR_LOG_FILE
printenv >>$CURR_LOG_FILE
echo "Script Begin!" >> $LOG_FILE_N
echo "Script Begin!" >> $CURR_LOG_FILE
/usr/bin/wget -q --tries=10 --timeout=20 --spider XXX.XXX.167.219
if [[ $? -eq 0 ]]; then
echo "Online" >> $LOG_FILE_N
echo "Online" >> $CURR_LOG_FILE
CURRENT_RUN_OP=$(python imd_aws_parse_rc4.py)
echo $CURRENT_RUN_OP >> $CURR_LOG_FILE
echo $CURRENT_RUN_OP >> $LOG_FILE_N
echo "Removing geckodriver.log File" >> $LOG_FILE_N
echo "Removing geckodriver.log File" >> $CURR_LOG_FILE
rm /home/pi/CronJob/geckodriver.log
echo "Removing aws_html.html File" >> $LOG_FILE_N
echo "Removing aws_html.html File" >> $CURR_LOG_FILE
rm /home/pi/CronOutput/aws_html.html
EMAIL_RUN_OP=$(python gmail_run_alert.py)
echo $EMAIL_RUN_OP >> $CURR_LOG_FILE
echo $EMAIL_RUN_OP >> $LOG_FILE_N
echo "Removing Single Run CSV File" >> $LOG_FILE_N
echo "Removing Single Run CSV File" >> $CURR_LOG_FILE
rm /home/pi/CronOutput/strip_d_temp.csv
echo "Script End Success!" >> $CURR_LOG_FILE
echo "Script End Success!" >> $LOG_FILE_N
echo -e "\n" >> $LOG_FILE_N
exit 1
else
echo "Offline" >> $LOG_FILE_N
echo "Offline" >> $CURR_LOG_FILE
EMAIL_RUN_OP=$(python gmail_run_alert.py)
echo $EMAIL_RUN_OP >> $CURR_LOG_FILE
echo $EMAIL_RUN_OP >> $LOG_FILE_N
echo "Script End Unable to Access Website!" >> $CURR_LOG_FILE
echo "Script End Unable to Access Website!" >> $LOG_FILE_N
echo -e "\n" >> $LOG_FILE_N
exit 0
fi