LINUX.ORG.RU

[debian][rtorrent as daemon] понятно все, кроме одного...

 


0

0

Решил пускать rtorrent как демон. Нагуглил init-скрипт для его, screen'а, запуска. Скрипт запускается, все работает (да, я пускаю rtorrent не из-под своего пользователя). Только вот не получается сделать «screen -r torrent»...

Собственно скрипт вот:

#!/bin/bash

RTUSER=rtorrent
 
RTORRENT=/usr/bin/rtorrent
KILL=/bin/kill
SCREEN=/usr/bin/screen
 
PIDFILE=/var/run/rtorrent.pid
 
start_rt()
{
    echo -n "Starting rtorrent... "
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --chuid $RTUSER --exec $SCREEN -- -DmUS torrent $RTORRENT
    if [ $? -eq 0 ]; then
        echo "success!"
    else
        echo "fail!"
    fi
}
 
stop_rt()
{
    echo -n "Stopping rtorrent... "
    start-stop-daemon --stop --pidfile $PIDFILE
    if [ $? -eq 0 ]; then
        echo "The process stopped successfully"
    else
        echo "The process failed to stop"
    fi
}
 
status_rt()
{
    echo -n "Status: "
    PID=`cat $PIDFILE`
 
    $KILL -0 $PID
    if [ $? -eq 0 ]; then
        echo "started"
        return 0
    else
        echo "stopped"
        return 1
    fi
 
}
 
restart_rt_if_needeed()
{
    status_rt
    if [ $? -ne 0 ]; then
        echo "Rtorrent is not running. Restart needed"
        stop_rt
        start_rt
    else
        echo "Restart is not needed"
    fi
}
 
case "$1" in
    start)
        start_rt
    ;;
    stop)
        stop_rt
    ;;
    restart)
        stop_rt
        start_rt
    ;;
    restart_if_needed)
        restart_rt_if_needeed
    ;;
    status)
        status_rt
    ;;
    *)
        echo "Usage: {start|stop|restart|status|restart_if_needed}"
    ;;
esac

[scholz@bunker] ~$ screen -r rtorrent/torrent Must run suid root for multiuser support.

Какое может быть решение в данной ситуации? :)


Ответ на: комментарий от mydoom

[code]start-stop-daemon --start --background --make-pidfile --pidfile /var/run/rtorrent.pid \
    --chuid mdm --exec /usr/bin/screen -- -dmS rtorrent /usr/bin/rtorrent[/code]

так ведь, собственно, та же строка, что и у меня в скрипте :)

наверняка я что-то пропустил, и не вижу что :)

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

Ничего не показывает. Оно же видет только текущие сессии пользователя, а в скрипте скрин пускается от другого пользователя. Начал гуглить по поводу multiuser сессий скрина, но везде написанно, что надо вводить команду непосредственно в самом скрине, и я не нашел как это сделать в .screenrc. Вобщем рад буду если кто подскажет :)

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

А почему бы просто не запустить screen следующим способом, например (как сделано у меня -- Arch на сервере):

su - jugatsu -c 'screen -dm /usr/bin/rtorrent -s /home/jugatsu/downloads/session' &> /dev/null

это выдержка из демона...

То есть при помощи su.

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

Еще не пробовал, но вопрос еще задам: нормально ли, без лишних движений, ты подключаешься к сессии другого пользователя? Если да - есть ли какие-то особые настройки .screenrc для пользователя jugatsu? Ведь у меня все запускается, только не дает доступа к сессии другого пользователя screen'а.

И второе - ты делал это сам, или средствами дистрибутива (может в арче искаропки есть такая возможность). :)

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

Вроде-как в темах кажется, что чуть ли не каждый пускает rtorrent как демон, и вроде-как у них все работает... Но поделиться опытом некому... Очень странно :)

Но спасибо всем ответившим - буду продолжать копать.

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

Ну почему же не может :)

Вот мой демон: http://paste.ubuntu.com/193585/

Пускается, соответственно sudo /etc/rc.d/rtorrent start|stop|restart от пользователя jugatsu (т.е. меня). Также прописан в автозагрузку:

DAEMONS=(syslog-ng network netfs crond sshd iptables portmap nfslock nfsd rtorrent lighttpd)

Дистрибутив Archlinux.

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

> jugatsu (т.е. меня)

тогда понятно :)

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

Для этого, оказалось, надо сделать multiuser сессию screen'а, а в эту степь мне пока что лень копать :)

Просто как всегда надеялся на готовое решение, которого, видать, пока нету, или оно есть, но скрывается :)

Если у меня таки руки дойдут - постараюсь обязательно запостить решение.

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

> Просто как всегда надеялся на готовое решение, которого, видать, пока нету, или оно есть, но скрывается :)

> Если у меня таки руки дойдут - постараюсь обязательно запостить решение

А если вот так попробовать:

sudo chmod +s /usr/bin/screen

sudo chmod 755 /var/run/screen

anton_jugatsu ★★★★
()

Решение было найдено здесь http://www.pixelbeat.org/docs/screen/

> For security reasons, screen by default is installed so that other users within the system can not attach to your screen sessions. To allow this to be changed one must set screen to run SUID root by doing the following (once):

> sudo chmod +s /usr/bin/screen

> sudo chmod 755 /var/run/screen

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

:)

Это я видел. Только чтобы разрешить определенному пользователю подключаться к терминалу необходимо ввести команду непосредственно в screen'е (^A:multiuser on). Но как это автоматизировать - пока что не нашел :)

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

[scholz@bunker] ~$ screen -r rtorrent/torrent
Access to session denied.

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

Все, спасибо :)

Я просто не вводил "acladd username"

Прописал это дело в .screenrc - все заработало как надо :)

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