LINUX.ORG.RU
решено ФорумAdmin

Распаковка обновлений 1С падает при старте по incron, при ручном запуске работает нормально

 , ,


1

1

Т.к. поговаривают, что нет у 1С консольного распаковщика, начал городить монстра.

Виртуалка с CentOS7 и автоматическим входом в XFCE под именем robot. По incron для новых файлов в определённом каталоге запускается скрипт распаковки и …не работает. Руками его запускаю - всё хорошо. Хоть из консоли в иксах, хоть с другого tty, хоть по ssh. По incron setup.x86_64 во время распаковки падает с «segmentation fault». Вот кусок отвечающий за распаковку:

#!/bin/bash
TMP=`mktemp -d`
…
export DISPLAY=:0
cd $TMP
./setup --keep --noexec --target $TMP

./setup.x86_64 usecwd &
sleep 2
xdotool mousemove 611 565 click 1 sleep 0.1 click 1 sleep 10 mousemove 446 414 click 1 sleep 1 mousemove 611 565 click 1
…
Падает ≈ через 3-5 секунд после того, как xdootool сделает второй клик.

Вместо ${TMP}/setup.x86_64 usecwd & пробовал xfce4-terminal -e /tmp/run.sh, в котором

#!/bin/bash
cd ${TMP}
./setup.x86_64 usecwd
sleep 60
Результат тот же - только ещё минуту висит сообщение о падении setup.x86_64.

Что сделать, чтобы оно по incron сработало?

UPD: помогло добавление LANG=en_US.UTF-8 перед вызовом распаковщика

★★★

При этом в случае падения большая часть файлов из 1cv8.edf успевает распаковаться. О.о Из-за чего оно падает?

mogwai ★★★ ()

Пиши логи

Трассировка bash скрипта включается через

set -x

Трассировка бинарников - через strace. Но скорее всего будет достаточно bash'а

router ★★★★★ ()
Ответ на: комментарий от router

strace (не ругайте за файлообменник, отключил адблок - рекламы не увидел), bash:

+ INBOX=/home/robot/inbox/
++ mktemp -d
+ TMP=/tmp/tmp.8WSPFlYn5d
+ unrar e -y /home/robot/inbox//updsetup.exe /tmp/tmp.8WSPFlYn5d

UNRAR 5.40 freeware      Copyright (c) 1993-2016 Alexander Roshal


Extracting from /home/robot/inbox//updsetup.exe

Extracting  /tmp/tmp.8WSPFlYn5d/1cv8.efd                              OK 
Extracting  /tmp/tmp.8WSPFlYn5d/ReadMe.txt                            OK 
Extracting  /tmp/tmp.8WSPFlYn5d/setup                                 OK 
Extracting  /tmp/tmp.8WSPFlYn5d/setup.exe                             OK 
Extracting  /tmp/tmp.8WSPFlYn5d/VerInfo.txt                           OK 
Extracting  /tmp/tmp.8WSPFlYn5d/??????????? ???????????. ?????? 3.0.54. ????? ? ??????.htm  OK 
All OK
+ chmod +x /tmp/tmp.8WSPFlYn5d
+ chmod +x /tmp/tmp.8WSPFlYn5d/setup
+ export DISPLAY=:0.0
+ DISPLAY=:0.0
+ cd /tmp/tmp.8WSPFlYn5d
+ ./setup --keep --noexec --target /tmp/tmp.8WSPFlYn5d
Creating directory /tmp/tmp.8WSPFlYn5d
Verifying archive integrity... All good.
Uncompressing 1C Setup....
+ sleep 2
+ ./setup.x86_64 usecwd
+ xdotool mousemove 611 565 click 1 sleep 0.1 click 1 sleep 10 mousemove 446 414 click 1 sleep 1 mousemove 611 565 click 1
/opt/unpack-update.sh: line 19: 13736 Segmentation fault      ./setup.x86_64 usecwd
+ sleep 1
+ rm /home/robot/inbox//updsetup.exe
+ rm /tmp/tmp.8WSPFlYn5d -rf

mogwai ★★★ ()

Руками его запускаю - всё хорошо. Хоть из консоли в иксах, хоть с другого tty, хоть по ssh.

Попробуй запускать без терминала. Например, через ssh -T

сравни переменные окружения ( set ) и лимиты ( ulimit -a ) при успешном и неуспешном запусках

Я бы поставил на лимиты, дальше отсутствие терминала и $PATH

Кстати, зачем нужен именно incron? crond не хватает?

router ★★★★★ ()
Ответ на: комментарий от router

По incron для новых файлов в определённом каталоге запускается скрипт распаковки

Стоп. Т.е. ты запускаешь инсталлятор по событию inotify? А уверен, что он на момент запуска _полностью_ загружен на хост?

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

Ну или хотя бы в скрипте перед запуском инсталлятора логировать его размер и md5sum

Хотя нет, вряд ли. Раз unzip завершается успешно, то проблема не в этом

router ★★★★★ ()
Последнее исправление: router (всего исправлений: 3)
Ответ на: комментарий от router

сравни переменные окружения

Спасибо! Нашёл. По крону оно $LANG не инициализировало. Добавил в скрипт — перестало вылетать. Вот на это никогда бы не подумал.

Кстати, зачем нужен именно incron? crond не хватает?

Чтобы одинэсники не простаивали. Скачал дистрибутив\обновление, положил в каталог - сразу работать можешь.

А уверен, что он на момент запуска _полностью_ загружен на хост?

Да, тригеры выставлены close_write и moved_to. И как ты сам верно подметил, раз unrar не ругается, то всё ок.

mogwai ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.