私は走るビッグリブトスクリーンセッションからデーモンとして次のコマンドを使用します。
screen -c /home/pi/.screenconf -L -dmS Biglybt_screen /usr/bin/java -cp "/usr/share/java/jna.jar:/home/pi/biglybt_stock/BiglyBT.jar:/home/pi/biglybt_stock/dorkbox-systemtray.jar:/home/pi/biglybt_stock/commons-cli.jar:/home/pi/biglybt_stock/log4j.jar:/home/pi/biglybt_stock/junit.jar:/home/pi/biglybt_stock/swt.jar" -Djava.library.path=/home/pi/biglybt_stock -Dbiglybt.install.path=/home/pi/biglybt_stock -Dazureus.script=/home/pi/biglybt_stock/biglybt -Djava.net.preferIPv4Stack=true -Ddebug.swtexec=1 -Dazureus.config.path=~/.biglybt_stock com.biglybt.ui.Main --ui=console
quit
次のように、screenセッションにコマンドを送信してデーモンを停止できます。
screen -S Biglybt_screen -p 0 -X stuff "quit ^M"
quit
システムがシャットダウンしたときにスクリーンセッションが正常にシャットダウンコマンドを受け取るようにサービスファイルを作成したいと思います。
このサービスファイルを試してみました。
[Unit]
Description=BiglyBt daemon
After=network-online.target
[Service]
Type=oneshot
User=pi
RemainAfterExit=yes
ExecStart=/usr/bin/screen -c /home/pi/.screenconf -L -dmS Biglybt_screen /usr/bin/java -cp "/usr/share/java/jna.jar:/home/pi/biglybt_stock/BiglyBT.jar:/home/pi/biglybt_stock/dorkbox-systemtray.jar:/home/pi/biglybt_stock/commons-cli.jar:/home/pi/biglybt_stock/log4j.jar:/home/pi/biglybt_stock/junit.jar:/home/pi/biglybt_stock/swt.jar" -Djava.library.path=/home/pi/biglybt_stock -Dbiglybt.install.path=/home/pi/biglybt_stock -Dazureus.script=/home/pi/biglybt_stock/biglybt -Djava.net.preferIPv4Stack=true -Ddebug.swtexec=1 -Dazureus.config.path=~/.biglybt_stock com.biglybt.ui.Main --ui=console
ExecStop=/usr/bin/screen -S Biglybt_screen -p 0 -X stuff "quit ^M"
[Install]
WantedBy=multi-user.target
しかし、サービスを停止すると、スクリーンセッションが終了するのではなくプロセスが終了しますが、私が見逃しているのは何ですか?
修正する: サービスファイルが有効です
[Unit]
Description=BiglyBt daemon
After=network-online.target
[Service]
Environment=DISPLAY=0.0
Type=simple
User=pi
Group=pi
ExecStart=/usr/bin/java -cp "/home/pi/biglybt_stock/BiglyBT.jar:/home/pi/biglybt_stock/swt.jar" -Djava.library.path=/home/pi/biglybt_stock -Dbiglybt.install.path=/home/pi/biglybt_stock -Dazureus.script=/home/pi/biglybt_stock/biglybt -Dazureus.config.path=/home/pi/.biglybt_stock -Dazureus.overridelog=1 -Dazureus.overridelogdir=/home/pi/biglybtlogs/ -Ddebug.swtexec=1 com.biglybt.ui.Main --ui="console,telnet"
ExecStop=/usr/bin/java -cp /home/pi/biglybt_stock/BiglyBT.jar -Djava.library.path=/home/pi/biglybt_stock -Dbiglybt.install.path=/home/pi/biglybt_stock -Dazureus.script=/home/pi/biglybt_stock/biglybt -Dazureus.config.path=/home/pi/.biglybt_stock com.biglybt.ui.Main --shutdown
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
これで問題は、もはやbiglybtのswt ui(gui)を起動できないということです。 swt ui は、リモートでサーバーにログインし、発行または実行することでui swt
起動できます。
/usr/bin/java -cp "/home/pi/biglybt_stock/BiglyBT.jar:/home/pi/biglybt_stock/swt.jar" -Djava.library.path=/home/pi/biglybt_stock -Dbiglybt.install.path=/home/pi/biglybt_stock -Dazureus.script=/home/pi/biglybt_stock/biglybt -Dazureus.config.path=/home/pi/.biglybt_stock -Dazureus.overridelog=1 -Dazureus.overridelogdir=/home/pi/biglybtlogs/ -Ddebug.swtexec=1 com.biglybt.ui.Main --ui="swt" --open
これにより、swt uiを起動する要求が基本プロセスに送信されます。残念ながら、これは通常のターミナルウィンドウではうまく機能しますが、systemdでデフォルトプロセスを実行すると、次のような結果が表示されます。
Unable to init server: Could not connect: Connection refused
ログログから
ベストアンサー1
特に、モードでプロセスがどのように機能するかについて特定の事項が想定されるため、screen
デーモンを使用したくありません。 ~からsystemd
systemd
oneshot
systemd.service(5)
文書:
oneshot
同様に動作しますsimple
が、systemdが後続のユニットを起動する前にプロセスを終了する必要があります。RemainAfterExit=
これらのサービスに特に便利です。両方がType=
指定されていない場合、ExecStart=
これは暗黙的なデフォルトです。
プロセスはすぐに終了しないため、oneshot
これは正しい動作ではありません。
報告bigly --help
:
usage: [options] [torrent [torrent ...]]
-h,--help Show this help.
-u,--ui <uis> Run <uis>. ',' separated list of user interfaces to run
(swt, console, telnet). The first one given will respond
to requests without determinable source UI (e.g. further
torrents added via command line).
--closedown shutdown an existing instance of BiglyBT
--shutdown shutdown an existing instance of BiglyBT
--open show the BiglyBT interface
--share share a resource
BiglyはTelnetモードで起動でき、追加の助けなしに独自のデーモンとして実行するのに十分です。その後、実行中のインスタンスと通信して終了コマンドを送信できます--shutdown
。これを念頭に置いて、simple
モードでサービスを実行できます(実行する必要がないクラスパス参照とコマンドラインオプションは除外したため、必要に応じて再度追加してください)。
素晴らしいサービス:
[Unit]
Description=BiglyBt daemon
After=network-online.target
[Service]
Type=simple
User=pi
ExecStart=/usr/bin/java -cp /home/pi/biglybt_stock/BiglyBT.jar -Djava.library.path=/home/pi/biglybt_stock -Dbiglybt.install.path=/home/pi/biglybt_stock -Dazureus.script=/home/pi/biglybt_stock/biglybt -Dazureus.config.path=/home/pi/.biglybt_stock com.biglybt.ui.Main --ui=telnet
#ExecStop=/usr/bin/java -cp /home/pi/biglybt_stock/BiglyBT.jar -Djava.library.path=/home/pi/biglybt_stock -Dbiglybt.install.path=/home/pi/biglybt_stock -Dazureus.script=/home/pi/biglybt_stock/biglybt -Dazureus.config.path=/home/pi/.biglybt_stock com.biglybt.ui.Main --shutdown
#SuccessExitStatus=143
ExecStop=/bin/sh -c "nc 127.0.0.1 57006 <<< 'quit iamsure'"
[Install]
WantedBy=multi-user.target
プロセスは終了コード143で終了したので、これをサービスの成功条件と見なします。Telnetモードでは動作しないようで、--shutdown
netcatを使用してTelnetサーバーにシャットダウンコマンドを送信しました(ポート57006がデフォルトポートのようです)。それらを無視したことがわかりました。
Telnet インターフェイスはすべてのインターフェイスにバインドされているため、外部接続をブロックするにはファイアウォールルールを設定する必要があります。