Назад | Перейти на главную страницу

Сценарий bash не работает как задание cron

У меня есть следующий сценарий оболочки

$cat capture.sh 
TIME=$(date +"%H-%M-%d-%m-%y") 
IP="203.208.198.29" 
PREFIX=$TIME$IP 
tshark  -f "udp" -i eth0 -w /root/captures/$PREFIX.cap& 
pid=$! 
sleep 2m 
kill $pid 

он отлично работает, когда я запускаю его из оболочки.

но когда я добавляю его на вкладку cron, ничего не происходит.

моя запись crontab: 1 * / 2 * 2 3,4,5 sh /root/capture.sh

tail /var/log/cron 

показывает, что команда выполнена.

но ничего не происходит. Я установил разрешение на выполнение для «all» для capture.sh и разрешение на запись для «all» для каталога / root / captures.

заранее спасибо

Ваш PATH переменная, вероятно, не то, что вы ожидаете внутри cron.

Используйте полные пути к каждому исполняемому файлу в вашем скрипте или задайте путь вручную в вашем crontab или скрипте.

Кроме того, лучший способ остановить ваш tshark будет использовать встроенные функции:

   -a  <capture autostop condition>
       duration:value Stop writing to a capture file after value seconds
       have elapsed.

Также # 2: добавьте строку shebang (#!)

Cron ограничит путь, используемый заданиями cron. Попробуйте / usr / sbin / tshark вместо просто tshark. Вы можете проверить, где находится tshark, через which tshark

Глядя на ваш сценарий, я вижу, что вы пытаетесь захватить трафик на две минуты и записать файл. Вы действительно имели в виду, что cronjob запускается каждую среду / четверг / пятницу в феврале, каждый второй час в 1 час? Полагаю, вы хотели, чтобы он запускался каждые 2 минуты ...

Из crontab(5) (который можно прочитать с помощью man 5 crontab)

   cron(8) examines cron entries once every minute.

   The time and date fields are:

          field          allowed values
          -----          --------------
          minute         0-59
          hour           0-23
          day of month   1-31
          month          1-12 (or names, see below)
          day of week    0-7 (0 or 7 is Sun, or use names)

   A field may be an asterisk (*), which always stands for "first-last".

Поскольку команда tshark не найдена, у вас есть два способа исправить это.

  1. определить путь в crontab

    ПУТЬ = $ ПУТЬ: / путь к tshark

    * / 2 * 2 3,4,5 ш /root/capture.sh

  2. Используйте в скрипте полный путь к tshark.

    вариант №1 - предпочтительный способ