LINUX.ORG.RU

Семафоры в Tumbleweed

 


1

1

Добрый день.

Поставил Tumbleweed и столкнулся с неожиданной ситуацией. Запускается база данных под выделенным пользователем - выделяется общая память, массивы семафоров. Все работает.

Далее, в кроне этим пользователем запускается задание, никак с базой не связанное (для пробы даже пустой скрипт проверил) и при завершении этого задания и его сессии очищаются все массивы семафоров этого пользователя, выделенные для базы.

Соответственно, при подключении к базе - ошибка.

Журнал системы:

Jun 08 11:11:01 s1 systemd[1]: Created slice User Slice of UID 1000.
Jun 08 11:11:01 s1 systemd[1]: Starting User Runtime Directory /run/user/1000...
Jun 08 11:11:01 s1 systemd[1]: Finished User Runtime Directory /run/user/1000.
Jun 08 11:11:01 s1 systemd[1]: Starting User Manager for UID 1000...
Jun 08 11:11:01 s1 systemd[21914]: pam_unix(systemd-user:session): session opened for user dbuser(uid=1000) by (uid=0)
Jun 08 11:11:01 s1 systemd[21914]: Queued start job for default target Main User Target.
Jun 08 11:11:01 s1 systemd[21914]: Created slice User Application Slice.
Jun 08 11:11:01 s1 systemd[21914]: Started Daily Cleanup of User's Temporary Directories.
Jun 08 11:11:01 s1 systemd[21914]: Reached target Paths.
Jun 08 11:11:01 s1 systemd[21914]: Reached target Timers.
Jun 08 11:11:02 s1 systemd[21914]: Starting D-Bus User Message Bus Socket...
Jun 08 11:11:02 s1 systemd[21914]: Starting Create User's Volatile Files and Directories...
Jun 08 11:11:02 s1 systemd[21914]: Finished Create User's Volatile Files and Directories.
Jun 08 11:11:02 s1 systemd[21914]: Listening on D-Bus User Message Bus Socket.
Jun 08 11:11:02 s1 systemd[21914]: Reached target Sockets.
Jun 08 11:11:02 s1 systemd[21914]: Reached target Basic System.
Jun 08 11:11:02 s1 systemd[21914]: Reached target Main User Target.
Jun 08 11:11:02 s1 systemd[21914]: Startup finished in 161ms.
Jun 08 11:11:02 s1 systemd[1]: Started User Manager for UID 1000.
Jun 08 11:11:02 s1 systemd[1]: Started Session c27400 of User dbuser.
Jun 08 11:11:02 s1 cron[21910]: pam_unix(crond:session): session opened for user dbuser(uid=1000) by (uid=0)
Jun 08 11:11:02 s1 CRON[21924]: (dbuser) CMD (/data1/bin/test.sh)
Jun 08 11:11:02 s1 CRON[21910]: (dbuser) CMDEND (/data1/bin/test.sh)
Jun 08 11:11:02 s1 CRON[21910]: pam_unix(crond:session): session closed for user dbuser
Jun 08 11:11:02 s1 systemd[1]: session-c27400.scope: Deactivated successfully.
Jun 08 11:11:12 s1 systemd[1]: Stopping User Manager for UID 1000...
Jun 08 11:11:12 s1 systemd[21914]: Activating special unit Exit the Session...
Jun 08 11:11:12 s1 systemd[21914]: Stopped target Main User Target.
Jun 08 11:11:12 s1 systemd[21914]: Stopped target Basic System.
Jun 08 11:11:12 s1 systemd[21914]: Stopped target Paths.
Jun 08 11:11:12 s1 systemd[21914]: Stopped target Sockets.
Jun 08 11:11:12 s1 systemd[21914]: Stopped target Timers.
Jun 08 11:11:12 s1 systemd[21914]: Stopped Daily Cleanup of User's Temporary Directories.
Jun 08 11:11:12 s1 systemd[21914]: Closed D-Bus User Message Bus Socket.
Jun 08 11:11:12 s1 systemd[21914]: Stopped Create User's Volatile Files and Directories.
Jun 08 11:11:12 s1 systemd[21914]: Removed slice User Application Slice.
Jun 08 11:11:12 s1 systemd[21914]: Reached target Shutdown.
Jun 08 11:11:12 s1 systemd[21914]: Finished Exit the Session.
Jun 08 11:11:12 s1 systemd[21914]: Reached target Exit the Session.
Jun 08 11:11:12 s1 systemd[1]: user@1000.service: Deactivated successfully.
Jun 08 11:11:12 s1 systemd[1]: Stopped User Manager for UID 1000.
Jun 08 11:11:12 s1 systemd[1]: Stopping User Runtime Directory /run/user/1000...
Jun 08 11:11:12 s1 systemd[1]: run-user-1000.mount: Deactivated successfully.
Jun 08 11:11:12 s1 systemd[1]: user-runtime-dir@1000.service: Deactivated successfully.
Jun 08 11:11:12 s1 systemd[1]: Stopped User Runtime Directory /run/user/1000.
Jun 08 11:11:12 s1 systemd[1]: Removed slice User Slice of UID 1000.

Это баг или фича?

Похоже, не следует пенять на дистрибутив.

На виртуалке сделал похожий «стенд», тоже на tumbleweed (VERSION_ID=«20220504») - все ок. Задание в кроне просто отрабатывает

Jun 08 17:09:01 amksuse systemd[1]: Started Session c3 of User dbuser.
Jun 08 17:09:01 amksuse cron[21254]: pam_unix(crond:session): session opened for user dbuser(uid=1000) by (uid=0)
Jun 08 17:09:01 amksuse CRON[21255]: (bis) CMD (/data1/bin/test.sh)
Jun 08 17:09:01 amksuse CRON[21254]: (bis) CMDEND (/data1/bin/test.sh)
Jun 08 17:09:01 amksuse CRON[21254]: pam_unix(crond:session): session closed for user dbuser
Jun 08 17:09:01 amksuse systemd[1]: session-c3.scope: Deactivated successfully.

при завершении ничего не очищает, semaphore arrays остаются

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 32774      dbuser        644        619642880  4

------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x00000000 65570      dbuser        666        7
0x00000000 65571      dbuser        666        104
0x00000000 65572      dbuser        666        104

Что-то, видимо, проскочило в настройке железного сервера (VERSION_ID=«20220502»)… Пойду читать про slice…

krivenya
() автор топика

В качестве обходного решения помогло включение долговременных служб для пользователя dbuser, под которым запускается база данных.

loginctl enable-linger dbuser

Теперь и при завершении сессии задания крона от dbuser база продолжает работать. Лог системы при отработке крона принял привычный вид, весь флуд типа Created slice User Slice of UID …, Starting User Manager for UID …, Queued start job for default target Main User Target, Created slice User Application Slice ушел…

Jun 10 12:19:01 s1 systemd[1]: Started Session c2617 of User dbuser.
Jun 10 12:19:01 s1 cron[18757]: pam_unix(crond:session): session opened for user dbuser(uid=1000) by (uid=0)
Jun 10 12:19:01 s1 CRON[18758]: (dbuser) CMD (/data1/bin/test.sh)
Jun 10 12:19:02 s1 CRON[18757]: (dbuser) CMDEND (/data1/bin/test.sh)
Jun 10 12:19:02 s1 CRON[18757]: pam_unix(crond:session): session closed for user dbuser
Jun 10 12:19:02 s1 systemd[1]: session-c2617.scope: Deactivated successfully.

Осталось непонятно, почему это потребовалось в данном отдельном случае? Ни на одном тесте и на новой виртуалке ничего подобного возникало.

krivenya
() автор топика
Ответ на: комментарий от krivenya

В общем, все оказалось несложно (как всегда, когда стала понятна причина).

Причина была в том, что после создания пользователя в его сессию переключились из root по switch user (su dbuser) и запустили базу и задание в кроне, ни разу не войдя под самим пользователем.

Соответственно, каждый запуск задания крона был «как в первый раз»….

Нормальный запуск сессии dbuser и его заданий все решил. И с отключенным linger.

PS Понятно стало после просмотра user-status

# loginctl user-status dbuser
Failed to get user: User ID 1002 is not logged in or lingering
krivenya
() автор топика
Ответ на: комментарий от krivenya

PPS А еще лучше - создать пользователя в системе с параметром «-r».

«Any user that starts processes & daemons requiring communication & synchronization mechanisms need to be started by system users which are excluded from IPC removal (shared memory and semaphores). Otherwise the default behavior for systemd is to “clean slate on logout” ensuring the user no longer consumes IPC resources.»

(adduser -r or adduser –system)

krivenya
() автор топика