Попытка запустить два скрипта Python с помощью Cron при запуске

Вы можете добиться того, чего хотите, используя структуру case control следующим образом:

#!/bin/bash
log1_length=$(wc -l <log1.txt)
log2_length=$(wc -l <log2.txt)

for i in $(seq $log1_length); do 
    arg1="$(head -$i <log1.txt | tail -1)"
    arg2="$(head -$(((i-1) % log2_length + 1)) <log2.txt | tail -1)"
   # Case control structure to replace digit equivalent in words 
    case ${i} in
        1) echo -n "The first color ";;
        2) echo -n "The second color ";;
        3) echo -n "The third color ";;
        4) echo -n "The fourth color ";;
        5) echo -n "The fifth color ";;
        6) echo -n "The sixth color ";;
        7) echo -n "The seventh color ";;
        8) echo -n "The eighth color ";;
        9) echo -n "The ninth color ";;
       10) echo -n "The tenth color ";;
       11) echo -n "The eleventh color ";;
    esac 
    echo ${i}"$i${arg1} is ${arg2}" |  tr -d '0123456789'   
done

Вывод выглядит следующим образом:

The first color Black is Ugly
The second color Blue is Nice
The third color Brown is cool
The fourth color Copper is pretty
The fifth color Cyan is Ugly
The sixth color Gold is Nice
The seventh color Gray is cool
The eighth color Green is pretty
1
10.01.2021, 20:38
1 ответ

ПВЗ:

Когда сценарий запускается из командной строки, но не запускается под cron, причиной обычно являются PATHразличия или проблемы с синхронизацией ресурсов :

1. PATHотличается:

Ваше cronзадание не запускается с той же СРЕДОЙ , что и команды, выдаваемые из вашей интерактивной оболочки. printenvможет показать вам разницу:

$ printenv
...
PATH=/home/pi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: etc, etc 
...  

Итак,отредактируйте свой crontab, чтобы создать задание cron, которое запускает printenvи перенаправляет вывод в файл:

* * * * * /usr/bin/printenv > /home/pi/mycronenvironment.txt 2>&1

Если вы вводите команду в своем crontab, которая не в ее ПУТИ, вы можете либо :1 )изменить ПУТЬ, либо 2 )использовать полный путь к команда

2. cronне знает о наличии ресурсов

Чаще всего это происходит, когда задание планируется с помощью средства @reboot. Например, если ваше задание cronзапускается во время загрузки и требует сетевых служб. Если сеть еще недоступна, ваша работа просто не удастся. А так как он не интерактивный , вы не увидите вывод(stdoutи/или stderr), и любые сообщения об ошибках или предупреждения могут быть потеряны.

Решение часто состоит в том, чтобы добавить немного sleepперед запуском вашей команды. Например:

@reboot /bin/sleep 20; /path/to/myscript >> /pi/home/myscriptlog.txt 2>&1

Когда cronзапускается во время загрузки и выполняется эта строка, cronбудет sleepв течение 20 секунд перед выполнением следующей команды. Это почти всегда работает, но, конечно, неточно , поскольку мы можем не знать с какой-либо уверенностью, когда ресурсы станут доступными. Если этого требует ваша работа или если эта неопределенность беспокоит вас, вы должны рассмотретьsystemd; он поддерживает видимость системных ресурсов во время процесса загрузки и может приступить к работе как можно скорее.

Также обратите внимание :Сообщения об ошибках от заданий, выполняемых под cronпо умолчанию /dev/null

.

Эта проблема устранена, как показано выше :a перенаправление из stderrи stdoutв «файл журнала»:

>> /home/pi/cronjoboutput.log 2>&1
1
18.03.2021, 22:37

Теги

Похожие вопросы