LINUX.ORG.RU

[когда коту делать нечего] Запуск agetty как демона


0

1

Ну по за головку вы уже поняли, что в этом треде какая-то нездоровая фигня. :) К делу: иксы-то быстро стартуют, а вот виртуальные консоли прочухиваются только после того, как все демоны поднимутся. Надоело мне это, да и в огород любителям systemd надо кинуть новый булыжник. Итак. Подопытный: Арчлинукс. Место действия: несчастный комп моей девушки. Задача: запуск agetty как службы.

Собственно, сам демон (осторожно, быдлокод) /root/agettyd:

#!/bin/bash

if [ -n "$pidfile" ] ; then
	echo -n $$ > "$pidfile"
fi

while true ; do
	coproc setsid bash <<-XXX
		exec /sbin/agetty -8 -s 38400 "$tty" linux
	XXX
	trap 'kill ${COPROC_PID} ; exit $?' INT TERM EXIT
	wait ${COPROC_PID}
	trap - INT TERM EXIT
done

Старт/стоп-скрипт /etc/rc.d/agetty:

#!/bin/bash

. /etc/rc.conf
. /etc/rc.d/functions

tty="`echo "$0" | egrep -o -- '-[a-zA-Z0-9]+$' | cut -d- -f2`"

if [[ -z "$tty" ]] ; then
	tty=tty1
fi

daemonname="agetty-${tty}"

pidfile="/run/${daemonname}.pid"
if [[ -r $pidfile ]]; then
  read -r PID < "$pidfile"
  if [[ ! -d /proc/$PID ]]; then
    # stale pidfile
    unset PID
    rm -f "$pidfile"
  fi
fi

case "$1" in
  start)
    stat_busy "Starting ${daemonname}"
    [ -z "$PID" ] && (
	export tty
	export pidfile
	/root/agettyd &
    ) &> /dev/null < /dev/null
    if [ $? -gt 0 ]; then
      stat_fail
    else
      add_daemon lxdm
      stat_done
    fi
    ;;
  stop)
    stat_busy "Stopping ${daemonname}"
    [ ! -z "$PID" ] && kill $PID &> /dev/null
    if [ $? -gt 0 ]; then
      stat_fail
    else
      rm_daemon lxdm
      stat_done
    fi
    ;;
  restart)
    $0 stop
    sleep 3
    $0 start
    ;;
  *)
    echo "usage: $0 {start|stop|restart}"
esac
exit 0

Симлинки:

# ls -l /etc/rc.d/agetty*
-rwxr-xr-x 1 root root 939 янв.   7 18:12 /etc/rc.d/agetty
lrwxrwxrwx 1 root root   6 янв.   7 17:34 /etc/rc.d/agetty-tty3 -> agetty
lrwxrwxrwx 1 root root   6 янв.   7 17:33 /etc/rc.d/agetty-tty4 -> agetty
lrwxrwxrwx 1 root root   6 янв.   7 17:34 /etc/rc.d/agetty-tty5 -> agetty
lrwxrwxrwx 1 root root   6 янв.   7 17:34 /etc/rc.d/agetty-tty6 -> agetty

Добавляем службы в /etc/rc.conf:

# grep DAEMONS /etc/rc.conf
# DAEMONS
DAEMONS=(syslog-ng @dbus @network @lxdm agetty-tty3 agetty-tty4 agetty-tty5 agetty-tty6 alsa @crond preload @ppp iptables @verynice dnsmasq @openntpd)

Убираем соответствующие строки из /etc/inittab:

# grep tty /etc/inittab 
c1:2345:respawn:/sbin/agetty -8 -s 38400 tty1 linux
c2:2345:respawn:/sbin/agetty -8 -s 38400 tty2 linux
#c3:2345:respawn:/sbin/agetty -8 -s 38400 tty3 linux
#c4:2345:respawn:/sbin/agetty -8 -s 38400 tty4 linux
#c5:2345:respawn:/sbin/agetty -8 -s 38400 tty5 linux
#c6:2345:respawn:/sbin/agetty -8 -s 38400 tty6 linux

Первые две консоли остались в inittab. Первая понятно почему — потому что там идут стартовые логи, и agetty должен запускаться только после полной инциализации системы. Ну а вторая просто так. И в целом их не стоит оттуда убирать, потому что демоны могут быть убиты, а вот процессы, порождаемые init — штука более надежная.

Выдохнул.

какой хм... «вендорлок» :) почти немного и «зонд» получится :)

попытка что то упдейтить потом будет нереальным вызовом :)

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

попытка что то упдейтить потом будет нереальным вызовом :)

Почему?

geekless ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.