В стандартных поставках от 1С сервер хранилища конфигурации для linux x86_64 систем не поставляется.
Ибо сервер хранилища конфигурации является 32-разрядным приложением.
Ибо сервер хранилища конфигурации является 32-разрядным приложением.
Случилось так, что сервер уже поднят и достаточно прекрасно чухает себя на 64-битной платформе. А понадобилась возможность ведения "командной" разработки конфигурации...
Фирма 1С заявляет, что "одновременная работа 32-х-битного сервера хранилища вместе с 64-х битным сервером 1С:Предприятия возможна"!
Качаем i386 сборку необходимого нам дистрибутива (в моем случае это был 8.3.5.1231) и распаковываем, например, в /opt/1C/cr
Приступим:
Создаем скрипт автозапуска сервера хранилища
И далее все просто:
Фирма 1С заявляет, что "одновременная работа 32-х-битного сервера хранилища вместе с 64-х битным сервером 1С:Предприятия возможна"!
Качаем i386 сборку необходимого нам дистрибутива (в моем случае это был 8.3.5.1231) и распаковываем, например, в /opt/1C/cr
#apt-get install libstdc++6:i386
#service srv1cv83 stop
#cp /etc/init.d/srv1cv83 ~/
#cd /opt/1C/cr && ls | while read p; do dpkg -X ${p} / ; done
Создаем скрипт автозапуска сервера хранилища
#mcedit /etc/init.d/crserverтакого содержания:
#!/bin/bash
### BEGIN INIT INFO
# Provides: crserver
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: 1C 8.3 Confiration Storage Server
# Description: 1C 8.3 Confiration Storage Server
### END INIT INFO
SRV_PORT="1542"
STORAGES_DIR="/mnt/1c/ConfigurationStorage"
#
BINDIR="/opt/1C/v8.3/i386"
PATH="${BINDIR}:${PATH}"
DESC="1C 8.3 Confiration Storage Server"
NAME=crserver
DAEMON=${BINDIR}/$NAME
DAEMON_ARGS="-daemon -port ${SRV_PORT} -d ${STORAGES_DIR}"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# ======[start]======
# Seting FD limit (fix: error 24 too many open files)
ulimit -n 50000
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON --test > /dev/null || return 1
start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS || return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
}
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
restart)
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
exit 3
;;
esac
# ======[theend]======
ну, соответственно подставляем свои переменные.И далее все просто:
#mv ~/srv1cv83 /etc/init.d/srv1cv83
#chmod a+x /etc/init.d/crserver && update-rc.d crserver defaults #service srv1cv83 start
#service crserver start
#rm -R /opt/1C/cr
Сервер хранилища запущен.
Запускаем конфигуратор и создаем новое локальное хранилище с <Имя хранилища>. Копируем его в каталог STORAGES_DIR, указанный в настройках скрипта запуска сервера хранилища. Подключаем полученное хранилище к БД для разработок (tcp://<IP сервера>/<Имя хранилища>).
несколько серверов хранилищ на одной машине в линуксе можно поставить? например, 8.3.3.496 и 8.3.8.1652?
ОтветитьУдалитьВ принципе, да. Распаковать в разные директории, сделать разные скрипты запуска (пути, порты). Не пробовал, но должно работать.
УдалитьДень добрый не могли бы подсказать в какую степь копать.
ОтветитьУдалитьпри запуске журнал выдет следующее
-- Начат процесс запуска юнита c1storage.service.
авг 31 18:37:57 1c-storage systemd[1]: c1storage.service: Control process exited, code=exited status=1
авг 31 18:37:57 1c-storage systemd[1]: Failed to start LSB: 1C 8.3 Confiration Storage Server.
-- Subject: Ошибка юнита c1storage.service
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Произошел сбой юнита c1storage.service.
--
-- Результат: failed.
авг 31 18:37:57 1c-storage systemd[1]: c1storage.service: Unit entered failed state.
авг 31 18:37:57 1c-storage systemd[1]: c1storage.service: Failed with result 'exit-code'.
авг 31 18:39:37 1c-storage systemd[1]: Starting Cleanup of Temporary Directories...
-- Subject: Начинается запуск юнита systemd-tmpfiles-clean.service
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
но служба вроде как запустилась
tcp 0 0 0.0.0.0:1542 0.0.0.0:* LISTEN 2069/crserver
root 2069 0.0 1.6 96812 33728 ? Ssl 18:37 0:00 /opt/1C/v8.3/i386/crserver -daemon -port 1542 -d /mnt/1C/storage
куда копать , какие логи смотреть,делал все по мануалу ну кроме названия скрипта crserver.система Ubuntu 16.04.3 LTS
Скрипт запуска демона написан для Ubuntu 14.04. В 16-й за запуск служб отвечает systemd а не init.d. Обратную совместимость оставили, соответственно служба запускается. Вам нужно переписать скрипт запуска по правилам systemd и правильно потом его зарегистрировать (#update-rc.d crserver defaults не подойдет). В принципе эту ошибку можно игнорировать. У меня на 16-й в логи ругается, но работает. Единственное - для перезапуска демона нужен ребут. Если перепишите скрипт - можете поделиться - изменю статью. Самому переписывать пока некогда.
УдалитьНе удалось переписать для Ubuntu 16.04? Сам пока не могу справится.
ОтветитьУдалитьПолучилось на Ubuntu 16.04 таким способом, создал юнит для systemd:
ОтветитьУдалить/etc/systemd/system/crserver.service
с таким содержимым:
[Unit]
Description=test_service
[Service]
Type=oneshot
ExecStart=/opt/1C/v8.3/i386/crserver -daemon -port 1542 -d /mnt/storage
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Дальше перезапускаем systemd
$ sudo systemctl daemon-reload
Включаем автозагрузку юнита
$ sudo systemctl enable crserver.service
И теперь можно управлять службой так:
$ sudo systemctl stop | start | restart crserver.service
$ sudo service stop | start | restart crserver
И служба стартует автоматом.
Александр, спасибо, скрипт рабочий. Но при переподключении к хранилищу вылетает ошибка "Too many opened files". Подскажите, а куда теперь в 16.04 можно сделатьв ставку "# Seting FD limit (fix: error 24 too many open files) ulimit -n 50000"?
ОтветитьУдалитьВ /etc/security/limits.conf добавьте/измените строки:
Удалить* hard nofile 65536
* soft nofile 65536
После - перезагрузка
Не помогло. Пробовал вместо 65536 ставить 2000000. Дописывал в /etc/sysctl.conf -> fs.file-max=2000000. Тоже самое...
УдалитьВыполняем:
Удалить#ps -aux | grep crserver
Ответ:
root 2081 0.0 0.7 155332 57448 ? Ssl 09:53 0:14 /opt/1C/v8.3/i386/crserver -daemon -port 1542 -d /media/ConfigurationStorage
Первый параметр ответа - это юзер. Обычно это root, если не переназначали принудительно.
Правим /etc/security/limits.conf:
root hard nofile 65536
root soft nofile 65536
Ребут.
Как я понял '*' в ubuntu не распространяется на рута.
Еще вариант создать конфиг в:
/etc/systemd/system/crserver.service.d/nofile_limit.conf
с таким содержимым:
[Service]
LimitNOFILE=65536
Разобрался, в /etc/systemd/system/crserver.service в разделе [Service] надо добавить LimitNOFILE=infinity
Удалить