В стандартных поставках от 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
Удалить