1

Тема: В помощь изучающим systemd

В связи с приближением платформы Linux (Linux-ядра, systemd, GNU C Library (glibc), RPM, как менеджер пакетов, и Wayland, как графическая система) многие сталкиваются с необходимостью изучать и работать с systemd.

Для начала вам поможет эта табличка, рекомендую занести её в закладки:

+ Systemd Cheatsheet

https://cdn.rawgit.com/ruzickap/linux.xvx.cz/gh-pages/files/systemd_cheatsheet/systemd_cheatsheet.svg

Здесь она доступна и в других форматах.


Введение в systemd для пользователей upstart: https://wiki.ubuntu.com/SystemdForUpstartUsers

2

Re: В помощь изучающим systemd

Vascom пишет

В связи с приближением платформы Linux (Linux-ядра, systemd, GNU C Library (glibc), RPM, как менеджер пакетов, и Wayland

Откуда сведения, что идёт приближение платформы Linux именно с RPM и wayland? Ну и systemd к этому же вопросу?

3

Re: В помощь изучающим systemd

Данная работа ведётся в рамках Fedora Project.
Systemd как открытый проект используется в разных дистрибутивах и системах.

Создание такой платформы резко упростит разработку открытого ПО, избавит от необходимости клепать сто тыщ дистрибутивов, сведя разницу между ними лишь к различным обоям. На самом деле это, конечно, полемическое упрощение - разница между дистрибутивами сведется лишь к бизнес-логике (вопросы обновления ПО, ориентация на какие-то конкретные задачи и архитектуры, и т.п.), но тем не менее, понятно, что общая платформа избавит разработчиков от тучи проблем.

И если хотите это обсудить, то лучше создать отдельную тему во Флейме, а тут Systemd Cheatsheet обсуждаем.

4

Re: В помощь изучающим systemd

Эм а с русским описанием некто не видел ?

5

Re: В помощь изучающим systemd

Вот есть на русском https://fedoraproject.org/wiki/SysVinit … atsheet/ru
Но она меньше и древнее. Всё же самое актуальное на английском.

6

Re: В помощь изучающим systemd

Я так бы вообще не стал бы постить без русского перевода... Английскую версию и в мане найти можно...

7

Re: В помощь изучающим systemd

Документация по systemd конечно радует своей полнотой, но в ней нет соответствия с прежними командами и такой краткости как в табличке.
Кто желает - переводите пожалуйста.

8

Re: В помощь изучающим systemd

Желают все, а вот переводить никто не любит...

9 (03.10.2014 09:06:26 отредактировано Nigelist)

Re: В помощь изучающим systemd

Пробовал на Debian Jessie команда рестарта неинформативна:

Консоль
systemctl restart srv1cv83.service

Никаких сообщение, об успешном перезапуске службы, я не получил. Приходится проверять дополнительно статус сервиса.

10

Re: В помощь изучающим systemd

Это стандартное поведение в unix-way: если всё прошло без сучка и задоринки - ничего не выводить.
Так работает большинство утилит, даже cp.

11

Re: В помощь изучающим systemd

Nigelist пишет

Никаких сообщение, об успешном перезапуске службы, я не получил. Приходится проверять дополнительно статус сервиса.

echo $?

12

Re: В помощь изучающим systemd

Вот еще думаю будет полезно: http://habrahabr.ru/company/infobox/blog/241237/

13

Re: В помощь изучающим systemd

Очень неплохой " первосточник" от Леннарта Поттеринга  в переводе Сергея Пташника: http://www2.kangran.su/~nnz/pub/s4a/

14

Re: В помощь изучающим systemd

Добавил в первое сообщение:
Введение в systemd для пользователей upstart: https://wiki.ubuntu.com/SystemdForUpstartUsers

15 (13.01.2015 07:34:21 отредактировано Nigelist)

Re: В помощь изучающим systemd

verg, а разве сейчас его используют в каких либо проектах? Хотя в любом случае должна быть альтернатива systemd. ИМХО, монополия это плохо.

16

Re: В помощь изучающим systemd

Nigelist, это не альтернатива, а используется только в Ubuntu и старых системах.
Поэтому и появляются такие вещи для помощи людям в переходе с upstart.

17

Re: В помощь изучающим systemd

Vascom пишет

Nigelist, это не альтернатива, а используется только в Ubuntu и старых системах.
Поэтому и появляются такие вещи для помощи людям в переходе с upstart.

Я понимаю это. Я говорил о ситуации в целом. У любого продукта должен быть достойный конкурент.

18

Re: В помощь изучающим systemd

Nigelist пишет

verg, а разве сейчас его используют в каких либо проектах?

RHEL 6?

Nigelist пишет

У любого продукта должен быть достойный конкурент.

Конкуренции оно не выдержало.

19

Re: В помощь изучающим systemd

До кучи
Colourful ! systemd vs sysVinit Linux Cheatsheet

+ открыть спойлер

http://images.linoxide.com/systemd-vs-sysVinit-cheatsheet.jpg

Здесь она доступна и в других форматах.

20

Re: В помощь изучающим systemd

Пытаюсь завести 1С:Предприятие на Debian 8. Но, при старте сервис не запускается. Перезапускаю вручную, получаю статус:

Консоль
● srv1cv83.service - LSB: 1C:Enterprise 8.3 server
   Loaded: loaded (/etc/init.d/srv1cv83)
   Active: active (exited) since Ср 2015-01-28 19:31:53 ALMT; 1s ago
  Process: 1937 ExecStart=/etc/init.d/srv1cv83 start (code=exited, status=0/SUCCESS)

янв 28 19:31:45 viper su[1950]: Successful su for usr1cv8 by root
янв 28 19:31:45 viper su[1950]: + ??? root:usr1cv8
янв 28 19:31:45 viper su[1950]: pam_unix(su:session): session opened for user usr1cv8 by (uid=0)
янв 28 19:31:53 viper srv1cv83[1937]: Starting 1C:Enterprise 8.3 server: OK


Подскажите, что значит exited в статусе сервиса?

21 (28.01.2015 16:38:11 отредактировано Vascom)

Re: В помощь изучающим systemd

Скорее всего это значит, что юнит нормально отработал и завершился. Хотя надо читать документацию.
Да, такой статус у сервисов, призванных просто что-то запустить, например.

22 (28.01.2015 16:50:08 отредактировано Nigelist)

Re: В помощь изучающим systemd

Vascom, так нет никакой документации по этому сценарию, да и я не разбираюсь в bash. А сам сервис, не должен просто отрабатывать и завершаться. Думаю именно из-за некорректной работы сценария, у меня не получается создать базу в клиент-серверном режиме.

23

Re: В помощь изучающим systemd

Я имел в виду документацию к systemd. Ну и на содержимое юнита надо смотреть.

24

Re: В помощь изучающим systemd

Vascom, не подскажите, а есть ли внятная документация к systemd на русском? И чем поможет чтение документации? Ведь проблема в самом init-сценарии если не ошибаюсь?

P.S. Вот содержимое сценария, посмотрите если есть возможность:

+ открыть спойлер

Консоль
#!/bin/bash
#------------------------------------------------------------
# 1C:Enterprise server configuration parameters
#------------------------------------------------------------

### BEGIN INIT INFO
# Provides:             srv1cv83
# Required-Start:       $local_fs $network $remote_fs $time
# Required-Stop:        $local_fs $network $remote_fs $time
# Should-Start:         $syslog
# Should-Stop:          $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    1C:Enterprise 8.3 server
### END INIT INFO

# 1C:Enterprise server keytab file.
# default - usr1cv83.keytab file in 1C:Enterprise server
#           installation directory
#
#SRV1CV8_KEYTAB=

# Number of the cluster port created by default during first
# launch of ragent
#
# default - 1540
#
#SRV1CV8_PORT=

# Number of cluster agent main port. This port is used by the
# cluster console to address the central server. Cluster agent
# port is also specified as the IP port of the working server.
#
# default - 1541
#
#SRV1CV8_REGPORT=

# Port range for connection pool
# example values:
#   45:49
#   45:67,70:72,77:90
#
# default - 1560:1691
#
#SRV1CV8_RANGE=

# 1C:Enterprise server configuration debug mode
# 0 - default - off
# 1 - on
#
#SRV1CV8_DEBUG=

# Path to directory with claster data
# default - $HOMEDIR/.1cv83/1C/1Cv83
#
#SRV1CV8_DATA=

# Security level:
# 0 - default - unprotected connections
# 1 - protected connections only for the time of user
#     authentication
# 2 - permanently protected connections
#
#SRV1CV8_SECLEV=

#------------------------------------------------------------
# end of config
#------------------------------------------------------------

#########################################
########### init starts here ############
#########################################

# chkconfig: 35 74 36
# description: Starts and stops the 1C:Enterprise daemons

#------------------------------------------------------------
# global macros. generated by install script
#------------------------------------------------------------
G_CONF_STYLE=deb
G_VER_ARCH=x86_64
G_VER_MAJOR=8
G_VER_MINOR=3
G_VER_BUILD=5
G_VER_RELEASE=1248
G_BINDIR="/opt/1C/v${G_VER_MAJOR}.${G_VER_MINOR}/${G_VER_ARCH}"
#------------------------------------------------------------

G_VER_SHORT=${G_VER_MAJOR}.${G_VER_MINOR}
G_TITLE="1C:Enterprise ${G_VER_SHORT} server"

#------------------------------------------------------------
# this values can be passed from outside, so perform "z-check"
#------------------------------------------------------------
[ -z "$SRV1CV8_USER"      ] && SRV1CV8_USER=usr1cv8
[ -z "$SRV1CV8_BINDIR"    ] && SRV1CV8_BINDIR="$G_BINDIR"
[ -z "$SRV1CV8_PIDFILE"   ] && SRV1CV8_PIDFILE="/var/run/srv1cv${G_VER_MAJOR}${G_VER_MINOR}.pid"
[ -z "$SRV1CV8_KEYTAB"    ] && SRV1CV8_KEYTAB="$SRV1CV8_BINDIR/$SRV1CV8_USER.keytab"
[ -z "$SRV1CV8_WAITSTART" ] && SRV1CV8_WAITSTART=5
[ -z "$SRV1CV8_WAITSTOP"  ] && SRV1CV8_WAITSTOP=5

#------------------------------------------------------------
# builds ragent's command line from configuration parameters
#------------------------------------------------------------
function buildCommandLine() {
    local cmdline="$SRV1CV8_BINDIR/ragent -daemon"
    [ ! -z "$SRV1CV8_PORT" ] && cmdline="$cmdline -port $SRV1CV8_PORT"
    [ ! -z "$SRV1CV8_REGPORT" ] && cmdline="$cmdline -regport $SRV1CV8_REGPORT"
    [ ! -z "$SRV1CV8_DATA" ] && cmdline="$cmdline -d \"$SRV1CV8_DATA\""
    [ ! -z "$SRV1CV8_RANGE" ] && cmdline="$cmdline -range $SRV1CV8_RANGE"
    [ ! -z "$SRV1CV8_SECLEV" ] && cmdline="$cmdline -seclev $SRV1CV8_SECLEV"
    [ "x$SRV1CV8_DEBUG" == "x1" ] && cmdline="$cmdline -debug"
    echo $cmdline
}
#------------------------------------------------------------
# checks if process with passed pid exists
#------------------------------------------------------------
function checkpid() {
    ps -p $* > /dev/null
}
#------------------------------------------------------------
# waits SRV1CV8_WAITSTOP seconds for process termination,
# then kills it
#------------------------------------------------------------
function delayedkill() {
    local mypid=$1
    local delay=$2
    kill $mypid 2>/dev/null
    checkpid $mypid && sleep $delay || return 0
    if checkpid $mypid; then
        kill -9 $mypid
        logWarning "Process refused to die... So it was killed. May be you should increase SRV1CV8_WAITSTOP variable?";
    fi
    return 0
}
#------------------------------------------------------------
# extracts specified param from value from given command-line
#------------------------------------------------------------
function extractParam() {
    local param=$1
    shift

    local tmp=$*
    if [ ! -z "$*" ]; then
        if [ ${tmp:0:1} == "-" ]; then
            tmp=${tmp:1}
            local val=${tmp#*$param }
            # if old and new strings are equal
            # we don't have needed param in cmdline
            # so return
            [ "$val" == "$tmp" ] && return;
            val=${val%% -*}
            echo "$val"
        fi
    fi
}
#------------------------------------------------------------
# call it when something fails
#------------------------------------------------------------
function failure() {
    [ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo FAILED
    return 0
}
#------------------------------------------------------------
# extracts data dir from ragent's command line or (if it's
# empty), builds it from users's home dir
#------------------------------------------------------------
function getDataDir() {
    local cmdline=`getRagentRealCmdLine`
    local datadir="$SRV1CV8_DATA"
    [ ! -z "$cmdline" ] && datadir=`extractParam d $cmdline`

    if [ -z "$datadir" ]; then
        local line=`grep ^$SRV1CV8_USER: /etc/passwd`
        local homedir=${line#*:*:*:*:*:}
        homedir=${homedir%:*}
        datadir="$homedir/.1cv${G_VER_MAJOR}${G_VER_MINOR}/1C/1Cv${G_VER_MAJOR}${G_VER_MINOR}"
    fi

    echo $datadir
}
#------------------------------------------------------------
# returns ragent configuration debug flag
#------------------------------------------------------------
function getDebugStatus() {
    local cmdline=`getRagentRealCmdLine`
    local debugFlag="$SRV1CV8_DEBUG"
    echo "$cmdline" | grep "\-debug" >/dev/null && debugFlag="1"
    [ ! -z "$debugFlag" ] && echo $debugFlag || echo "0"
}
#------------------------------------------------------------
# returns ragent port range
#------------------------------------------------------------
function getPortRange() {
    local cmdline=`getRagentRealCmdLine`
    local range="$SRV1CV8_RANGE"
    [ ! -z "$cmdline" ] && range=`extractParam range $cmdline`
    [ ! -z "$range" ] && echo $range || echo 1560:1591
}
#------------------------------------------------------------
# returns ragent main port
#------------------------------------------------------------
function getRagentPort() {
    local cmdline=`getRagentRealCmdLine`
    local port="$SRV1CV8_PORT"
    [ ! -z "$cmdline" ] && port=`extractParam port $cmdline`
    [ ! -z "$port" ] && echo $port || echo 1540
}
#------------------------------------------------------------
# get's running ragent command-line
#------------------------------------------------------------
function getRagentRealCmdLine() {
    local cmdline=`buildCommandLine`
    local mypid=`getRagentPid "$SRV1CV8_USER" "$cmdline"`
    local result=""
    [ ! -z "$mypid" ] && result=`ps --pid $mypid -o cmd= | sed -e "s/.*-daemon//"`
    echo "$result"
}
#------------------------------------------------------------
# tries to get pid of ragent process, started by this script
#------------------------------------------------------------

25

Re: В помощь изучающим systemd

Это к системд не имеет отношения на мой взгляд. Лучше в соответствующем разделе форума спросить или у тех, кто делал этот файл.