Задать вопрос
  • Как поднять сервис с помощью bash скрипта?

    @dmitrymp3 Автор вопроса
    Переписал скрипт
    spoiler

    #!/bin/bash
    
    # Текущее время
    var_time=`date`
    var_hour=`date +%H`
    
    # Час, до которого необходимо выполнять скрипт (обычно 7 утра, т.к. в 7.30 стартует сервер 1С)
    dead_hour=7
    
    a=/home/usr1cv8/1c_exchange_logs/reports/Exchange_\(95с1\)
    b=`date '+%Y-%m-%d'`
    c=$a$b.txt
    
    # Входной файл
    #last_file=/home/usr1cv8/1c_exchange_logs/reports/Exchange_\(95с1\)2021-09-13.txt
    last_file=$a$b.txt
    
    # Жестко заданный выходной файл конвертированный
    conv=/home/dmitrymp3/conv.txt
    
    # Файл логов
    log_file=/home/dmitrymp3/shell_logs.txt
    
    # Пишем в лог информацию о запуске скрипта
    echo "---------------------------------------------------------"
    echo "Скрипт запущен `date +%Y-%m-%d` в `date +%T`"
    
    if [ -e $last_file ]
    then
    echo "Файл $last_file существует, запускаем его конвертацию"
    iconv -f cp1251 -t utf8 $last_file -o $conv
    echo "Файл сконвертирован"
    else
    echo "Файл $last_file отсутствует."
    fi
    
    # Считаем в переменную, сколько совпадений найдено grep'ом
    var_grep=`grep -c "Завершение обмена" $conv`
    
    # Если в grep'ом найдено больше нуля совпадений и время меньше чем 7.20 утра, то глушим сервер и делаем об этом запись в лог-файл
    if [ $var_grep -gt 0 ]
    then
    echo "В файле $last_file найдено \"Завершение обмена\" $var_grep раз."
    echo "Запускаем проверку времени"
    
    if [ $var_hour -le $dead_hour ]
    then
    echo "Время меньше 7 утра"
    echo "Останавливаем сервер 1С"
    /usr/sbin/service srv1cv83v18-1334 stop
    else
    echo "Время больше 7 утра"
    echo "Сервер 1С остановлен не будет"
    fi
    
    else
    echo "В файле $last_file не найдено \"Завершение обмена\""
    fi
    
    echo "---------------------------------------------------------"


    В
    sudo crontab -e
    вписал:
    */1 * * * * /bin/sh /home/dmitrymp3/script.sh>>/home/dmitrymp3/shell_log2.log 2>&1

    Все заработало.
    Итого ошибки:
    1. Неполные пути до файлов в скрипте
    $HOME при запуске в sudo crontab -e дает, как я понял, неверные пути
    2. Неполные пути до исполняемых команд
    Вместо service srv1cv83v18-1334 stop необходимо было писать /usr/sbin/service srv1cv83v18-1334 stop
    3. Неумение логировать cron
    Буду разбираться в смысле конечной записи 2>&1. Она начала выводить всю информацию куда надо и как надо, что могло бы мне помочь решить проблему самостоятельно.

    Всем большое спасибо за ответы! Дальше буду переписывать скрипт как сервис, чтобы можно было cron'ом стартануть его в 3 ночи и завершить в 7 утра не делая дополнительных проверок времени в самом скрипте и избавляться от создания сконвертированного файла.
  • Как поднять сервис с помощью bash скрипта?

    @dmitrymp3 Автор вопроса
    кажется, получилось! тут тоже необходимо было указывать полный путь.
    Сделал which service, получил
    /usr/sbin/service, заменил service - на полный путь. Все отлично сработало!
    Спасибо большое!

    Буду очень благодарен если скинете мануал по средствам вывода (2>&1 и вот это все).
    Хотелось бы все-же получать нормальные логи по исполнению скриптов в кроне и не только.
  • Как поднять сервис с помощью bash скрипта?

    @dmitrymp3 Автор вопроса
    Виктор Таран, подскажите, что может означать в логе
    /home/dmitrymp3/stop.sh: 3: /home/dmitrymp3/stop.sh: service: not found
    эта же команда в консоли спокойно тормозит нужный сервис
  • Как поднять сервис с помощью bash скрипта?

    @dmitrymp3 Автор вопроса
    Файл stop.sh
    #!/bin/bash (не знаю, зачем это)
    service srv1cv83v18-1334 stop
    echo "stop.sh" >> stop.log
    echo `date` >> stop.log

    sudo crontab -e
    1 * * * * /bin/sh /home/dmitrymp3/stop.sh>>/home/dmitrymp3/shell_log2.log 2>&1

    Кажется я понял, в чем проблема.
    Перечитал еще раз, это выполнение скрипта каждую 1 минуту каждого часа. А чтобы запускать скрипт каждую минуту, надо писать */1
  • Как поднять сервис с помощью bash скрипта?

    @dmitrymp3 Автор вопроса
    Я пытался это делать следующим образом:
    1 * * * * /bin/sh /home/user/script.sh >> /home/user/shell_logs.txt
    К сожалению, в файле ничего не появляется. Подскажете, как правильно логировать скрипт, чтобы он выдавал все echo, что в нем написаны так же, как будто я его запускаю в консоли?
  • Как поднять сервис с помощью bash скрипта?

    @dmitrymp3 Автор вопроса
    Спасибо большое!
    Команда which sh дала абсолютно такой же вывод, как у вас.

    Попробовал написать в sudo crontab -e так же, как уже выше написал, это, к сожалению, не помогло. Очевидно, я что-то неправильно делаю в crontab.
    Сейчас пытаюсь понять, как посмотреть логи исполнения файлов в crontab. Либо они у меня не запускаются в принципе, либо запускаются как-то криво.

    Посмотрите, пожалуйста, выше привел тест с файлов stop.sh, он должен 100% работать, т.к. простейший, но не работает..
  • Как поднять сервис с помощью bash скрипта?

    @dmitrymp3 Автор вопроса
    Спасибо за ответ!
    точно, ведь когда файл исполняется от моего имени, путь подставляется от моей домашней папки!
    а когда я запускаю от root'a.. боже, эк я неразумен.. В свое оправдание могу сказать, что я также не смог понять, как выводить лог в нужный мне файл, а в /var/log/syslog не было информации о ходе выполнения скрипта. Соответственно, был с завязанными глазами. И изначально предполагалось, что скрипт будет выполняться от моего crontab'a.

    Тем не менее, исправление ошибки в моем случае не помогло.
    Более того, я пробую тест - создаю файл stop.sh с содержимым:
    #!/bin/bash (не знаю, зачем это)
    service srv1cv83v18-1334 stop

    Затем в sudo crontab -e добавляю
    1 * * * * /bin/sh /home/dmitrymp3/stop.sh
    В /var/log/syslog вижу строчку
    Sep 16 20:01:01 srv1c CRON[30662]: (root) CMD (/bin/sh /home/dmitrymp3/stop.sh)
    (почему-то не каждую минуту, как ожидаю).
    И никакого эффекта.
    Вероятно, я не совсем правильно использую crontab и запуск скрипта в нем, хотя не могу понять, что именно..