Ну я думаю этот вопрос интересует добрую половину админов,
которые не поленились и перевели свои конторы на LINUX
послав дядюшку Билли куда подальше. Здесь речь пойдет о том как сделать бэкап в «.dt» - файл из 1Cv8
используя в качестве сервера PostgreSQL естественно речь идет о поднятом сервера 1С под линуксом.
PostgreSQL под форточкой это ананизм, это мое мнение можете не соглашаться.
Не будем обсуждать каким образом делать бэкап лучше, просто мне надо было именно в dt.
От себя добавлю, что что делаю sql-выгрузку pg_dump, dt — это выгрузка в файл и не больше.
Итак, самый зад в том что wineсonsole не удастся запустить в текстовом режиме, ему все равно нужны иксы, если вы делаете выгрузку в ручную, то тут проблем нет, а вот если по cron-у то …
Решение оказалось очень простым запустим vnc4server а в качестве приложения запускаемого в Х-сесси укажем наш скрипт.
$sudo apt-get install vnc4server rcconf
$rcconf — убираем автостарт vnc4server
#su userdt
$vncpasswd — пароль по барабану, только не пустой
Редактируем файл /home/userdt/.vnc/xstartup
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
#< -x /etc/vnc/xstartup > && exec /etc/vnc/xstartup
#< -r $HOME/.Xresources > && xrdb $HOME/.Xresources
#xsetroot -solid grey
#vncconfig -iconic &
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
/usr/local/bin/1c_backup_dt #это наш скрипт бэкапа
Содержимое /usr/local/bin/1c_backup_dt
#!/bin/bash
DT=`date +%F`
BASE='E:\public\1C_Backup\'$DT".dt"
LOGFILE='E:\public\1C_Backup\'$DT".log"
echo $BASE
wineconsole "C:\Program Files\1cv82\common\1cestart.exe" DESIGNER /WA- /DisableStartupMessages /S"server\base" /N"user" /P"password" /DumpIB "$BASE" /out"$LOGFILE" &2>1 > /dev/null
sleep 600 ; #время необходимое для выполнения бэкапа в секундах
/usr/bin/vnc4server -kill :1 ;
[ ! -z "`pgrep Xvnc4`" ] && killall Xvnc4 ; #Навсякий
[ ! -z "`pgrep Xvnc4`" ] && killall Xvnc4 -9 #или уж если совсем все плохо
Теперь редактируем /etc/crontab
30 06 * * * userdt /usr/bin/vnc4server
Вуаля теперь в 6-30 утра создается выгрузку на каждый день в /public/1C_Backup он же E:\public\1C_Backup\ .
Как говорят сами 1с-чики бэкап деалть таким способом неследует. Бэкап рекомендуется делать sql-средствами, а конкретно pg_dump. Навсякий ниже приведу скрипт своего бэкапа его прелесть в том что он сам находит все базы в postgresql кроме служебных и делает выгрузку каждой базы в отдельности.
#!/bin/bash
clear
for DBNAME in `su -c 'psql -tc "select datname from pg_database";' postgres`
do
if [ $DBNAME != "postgres" ] && [ $DBNAME != "template0" ] && [ $DBNAME != "template1" ];
then
FN=/public/arc/sql/`/bin/date +%d%m%y%H%M`
BKNAME=$FN-$DBNAME.gz
echo $BKNAME
/bin/su -c "/usr/bin/pg_dump -F c $DBNAME | /bin/gzip -c > $BKNAME" postgres
fi
done