実行可能ファイルをscreen
自動的に起動したい起動時に新しいセッションを開始するUpstartジョブを作成しようとしています。java
他のいくつかのファイルも試しましたが、現在使用したい.confファイルは次のようになります。
description "Run the bungeecord jar"
start on (local-filesystems and net-device-up IFACE=eth0 and runlevel [2345])
stop on runlevel [016]
exec start-stop-daemon --start -c ridog --exec /usr/bin/screen -- -dmUS BungeeCord java -server -XX:UseSSE=4 -XX:+UseCMSCompactAtFullCollection -XX:MaxPermSize=356m -XX:ParallelGCThreads=6 -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:+UseCompressedOops -XX:+AggressiveOpts -Xmx256M -jar BungeeCord.jar
pre-stop script
screen -S BungeeCord -X foo "end^M"
end script
私が知っているのは、スクリプトが正しく機能しているようで、スクリプトを実行してsudo start bungeecord
期待した結果を得ることができますが、コンピュータを再起動しても機能しません。代わりに、次の場所でこのエラーが発生します/var/log/upstart/bungeecord.log
。
Cannot make directory '/var/run/screen': Permission denied
このエラーを確認しましたが、検索結果があいまいで結論が出ませんでした。 rootでコマンドを実行してエラーを削除しましたが、まだscreen
セッションがありません。私は次のようなさまざまなコマンドを試しました。
su ridog -c "screen -dmS BungeeCord java -jar /home/ridog/BungeeCord/BungeeCord.jar"
答え1
upstartで画面を呼び出すのは実際には少し面倒です。ただし、存在しないことに関する最初の質問は/var/run/screen
簡単に解決できます。
Ubuntu 10.10〜13.10には、起動時にクリーンアップと(再)作成を担当する起動タスクがあるため、そのタスクの/var/run/screen
後に起動スクリプトが実行されることを確認する必要があります。
start on stopped screen-cleanup
Ubuntu 10.04以降およびUbuntu 14.04以降では、このコードはinitスクリプトにあります。/etc/init.d/screen-cleanup
つまり、upstartジョブは次の結果でこれを参照できますrc
。
start on stopped rc
しかし、画面は依然として/var/run/screen権限について苦情を表示することができます。この問題は、次のようにsetidでscreenを呼び出すことで解決できます。
exec setsid screen -Dm /some/command
画面セッションは一度分岐するので、upstartが正しいpidに従うようにするには、「fork期待」スタンザを追加する必要があります。
以下は完全なサンプルスクリプトです(最小Ubuntu 12.04が必要です)。
# screen startup script
# requires upstart v1.4 or newer
description "running top in screen session"
start on ( local-filesystems
and stopped rc )
stop on runlevel [!2345]
respawn
setuid test
setgid test
# "setsid screen -Dm" only forks once
expect fork
# use setsid to avoid screen complaining about /var/run/screen permissions.
exec setsid screen -Dm -S mytopsession /usr/bin/top
答え2
電話をかける前に、/var/run/screen
適切な権限で権限を作成してください。root
screen
答え3
問題が解決しました。、私はusingからupstart
usingに切り替えましたcron
。はるかに簡単になり、今すべてが大丈夫になりました。
私が何をしたのか疑問に思うかもしれないこの記事を読んでいる人のために、私は簡単にしましたshell script
。
#!/bin/bash
java -Xms256M -Xmx256M -jar /home/ridog/BungeeCord/BungeeCord.jar
起動時に実行するように設定し、次の場所に新しい行を追加しますcrontab -e
。
@reboot screen -dmS BungeeCord sh /home/ridog/BungeeCord/run.sh
ご協力ありがとうございます!