LINUX.ORG.RU

Скрипт, выполняющийся в задаче cron и в оболочке среды имеет разный вывод.

 


0

1

Есть скрипт, условно выглядящий так:

#!/bin/bash

x=$(/usr/local/bin/jq ".x" /home/data.txt)
y=$(/usr/local/bin/jq ".y" /home/data.txt)
z=$(/usr/local/bin/jq ".z" /home/data.txt)
a=$(/usr/local/bin/jq ".a" /home/data.txt)

b=$(echo "scale=3; (${a} + ${y}) / ${x} * 100" | bc)

echo "x ${x}" > /var/log/_values.txt
echo "y ${y}" >> /var/log/_values.txt
echo "z ${z}" >> /var/log/_values.txt
echo "a ${a}" >> /var/log/_values.txt
echo "b 0${b}" >> /var/log/_values.txt

При запуске через /bin/bash, все отрабатывает корректно, и в файл уходят действительные значения

x 35645
y 225
z 35413
a 7
b 0.600

Однако задача, выполняемая посредством cron, отдает данные в таком формате

x
y
z
a
b 0

И я не могу осознать, чего cron не хватает. Вроде как-то подобную проблему решал посредством добавления какой-то переменной среды в скрипт. Но не могу вспомнить наверняка.

*/5 * * * * /bin/bash /root/scripts/script.sh


Последнее исправление: alekseipa5 (всего исправлений: 5)
Ответ на: комментарий от Lrrr

Теперь вывод выглядит так

x 12345
y
z
a
b 0

Как отслеживать логи крона? Единственное, что нашел в /var/log/cron.log

Jan 16 16:38:01 localhost CRON[55868]: (root) CMD (/bin/bash /root/scripts/script.sh)
alekseipa5
() автор топика
Последнее исправление: alekseipa5 (всего исправлений: 1)
Ответ на: комментарий от andytux

Что такое jq

JQ в действительности - полноценный язык программирования со всеми атрибутами - переменными, типами данных, арифметикой, циклами и условными переходами, массой встроенных функций и возможностью добавления новых.

что делает, конкретно

Удовлетворяет потребность вытащить нужную информацию из JSON или YAML файлов

В случае «cron» он ничего не делает.

Моя цель в том, чтобы он работал в скрипте, запускаемом в cron. Использовать эту утилиту отдельно в cron-задачах необходимости нет.

alekseipa5
() автор топика
Последнее исправление: alekseipa5 (всего исправлений: 1)
  • Где теги cron, crontab?
  • Где нормальная разметка сообщения?

Теперь по делу:

  • От какого пользователя проверяется скрипт (где он "правильный" вывод даёт)?
  • От какого пользователя запускается скрипт в cron (в чей crontab оно добавлено)?

Посмотри на разницу вывода env (без аргументов) в интерактивной сессии и из cron * * * * * /usr/bin/env >/tmp/cron-env.txt.

Подозреваю, из cron оно не может прочитать данные из /var/log, но это пальцем в небо, нужно больше вводных.

mord0d ★★★★★
()