問題タブ [systemd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - systemd での起動中に最後に実行してスクリプト出力を出力するにはどうすればよいですか?
展開プロセス中にホストを構成し、構成スクリプトの実行内容を画面に出力しようとしています。
RHEL6 では、画面に表示したいものをエコーしたり、ダイアログを使用して出力を表示したりするのは簡単で、スクリプトが完了したときにのみログイン プロンプトが表示されました。
- (スクリプト名 S99.myscript.sh の rc3.d または rc5.d フォルダーを使用しました)
RHEL7 では、このプロセスを模倣できません。rc.local は起動中に出力を表示せず、最後に実行されることも保証されていません。
スクリプトを実行する systemd サービス ファイルを作成する必要があると思います。
しかし、起動中に結果を画面に出力するにはどうすればよいですか?
また、スクリプトが終了する前にログイン プロンプトが表示されないようにするにはどうすればよいですか?
linux - 独立した cgroup で systemd サービスから外部プログラムを実行する方法
現在の cgroup 外の systemd サービスから外部プログラムを実行する必要があります。おそらくこれを解決するツールを見つけましたsystemd-run
が、まだ利用できないsystemdバージョン204で立ち往生しています。他の解決策はありますか?
私の問題をより詳細に:
アプリケーションは debian パッケージにバンドルされており、systemd サービスとしてインストールおよび実行されます。このサービスは、アプリケーションの新しいバージョンを後でダウンロードして実行しdpkg -i myapplication.deb
ます。アップグレードのインストール中はサービスを停止する必要がありますが、cgroup 内のすべてのプロセスが終了するまでサービスは停止しません。dpkg
がこの cgroup で実行されているため、デッドロックが発生しています。サービス停止タイムアウトの後、強制終了dpkg
され、アップグレードはインストールされません。
shutdown - Systemd - `ExecStop=` 中にユーティリティ Docker コンテナを実行する
私は CoreOS が私たちのニーズを満たしているかどうかをテストしています。私はsystemdが好きですが、正しく動作していないようです-具体的には、シャットダウン時です。
私の目標
私の目標は、サービスの開始時と停止時にスクリプトを実行して、サービスの DNS サーバーからそれぞれレコードを追加および削除することです。起動時にシステムによってサービスが開始されたとき、または手動で開始またはシャットダウンされたときに機能しますが、システムが再起動または停止されたときは機能しません ( shutdown -r now
、shutdown -h now
)。
これは、私が例として使用している docker レジストリ サービスの少し簡略化されたバージョンです。
(このユニットは、別のユニットregistry-ui.serviceと連携して動作します。一方が開始されると、もう一方も同様に動作します。)
行に注意してくださいConflicts=...
。サービスが適切にシャットダウンされなかった理由を突き止めようと時間を費やした後、追加しました。何もしませんでした。ただし、ドキュメントによると、サービスにはConflicts=shutdown.target
デフォルトで行があります。サービスが競合し、一方が起動すると、もう一方がシャットダウンします-またはドキュメントによると。
私は何を取りこぼしたか?ExecStop=
ラインが実行されないのはなぜですか?
アップデート
私は、ExecStop=
ラインが実行されることを確認しました。を使用するjournalctl -u registry.service -n 200
と、次のメッセージが表示されました。
これは、(コメントで推測したように) シャットダウン中に Docker コンテナーが起動しないことが問題であることを示しています。[Unit]
セクションに次の行を追加しました。
新しい行はjournalctlエラーに影響を与えないので、私の質問は、シャットダウンする前にユーティリティdockerコンテナを実行する方法はありますか?
service - systemd 起動スクリプトが実行されないのはなぜですか?
Debian テスト マシンの起動時に簡単なスクリプトを実行しようとしています。いくつかのガイドに従いましたが、サービスが開始されません。誰かが私が間違っていることを教えてもらえますか? インターネットでsystemdについて泣き言を言う前に、systemdについて理解したいと思います。
私は/etc/systemd/system/startup-scripts.service
(時々ここに、時には/lib/systemd/system/my-file.serviceへのシンボリックリンクとして)作成し、書きました
それから走った
また、/usr/bin/startup-script.sh をファイルし、実行可能にして実行しました。スクリプトが実行されると判断した限りでは、再起動は無駄でした。
答えにはjournalctlが関係していると思います。ここで何を見ているのかよくわかりません。マルチユーザーが間違ったターゲットであったとしても、私は驚かないでしょう。それは最も合理的に見えるものでしたが、私はそれが何のためにあるのか本当に自信がありません.
linux - systemd スクリプトからの ts_ calibration の実行に失敗する
起動時にsystemdによって実行されるスクリプトがあります。ユーザーがアプリケーションを終了すると、スクリプトは ts_ calibration を実行し、それが完了すると、アプリケーションを再度実行します。オングストロームでは正常に動作しましたが、Debian を実行している Beaglebone Black では動作しませんでした。
私のmita.shスクリプト
システムが起動すると、アプリは正常に起動しますが、アプリを終了すると ts_ calibration の実行に失敗します。次のエラーが表示されます:-
ts_open: そのようなファイルまたはディレクトリはありません
root としてログインすると、コマンド ラインからスクリプトを実行でき、すべてが期待どおりに機能します。
コマンドラインから入力するsudo ts_calibrate
と、同じエラーが発生します。
誰かがここで何が起こっているのかを理解するのを手伝ってくれますか?
root として ssh を実行するとスクリプトを正常に実行できますが、sudo を実行すると、ts_ calibration を実行する権限がないようです! systemd も正しい権限を持っていないようです!
よろしく、
ジェームズ。
.
.
.
systemd サービス
.
uname -a
Linux beaglebone 3.8.13-bone67 #1 SMP Wed Sep 24 21:30:03 UTC 2014 armv7l GNU/Linux
digital-ocean - CoreOS クラウド構成でコマンドを実行します (例: スワップを追加する)
cloud-config
標準ファイルとは異なり、runcmd
CoreOScloud-config
ファイルにはオプションがありません。現在、次を my に追加して、CoreOS マシンでスワップを有効にしていますcloud-config
。
次に、CoreOS イメージを初期化した後、マシンに ssh して実行する必要があります。
スワップが有効になる前 (例: で証明top
)。
ファイル自体で後者のコマンドを実行できるはずですが、フィールドcloud-config
なしでそのようなコマンドを実行する方法がわかりません。おそらくこれは、ユニットを編集するか、別のユニットを追加することで実行できますが、その方法はよくわかりません. runmcd
cloud-config
swap.service
unit
したがって、2 つの質問が残ります。(1) これは可能ですか、それとも最後のコマンドを手動で実行する必要があるのでしょうか。(2) 前者の場合、どのように?
java - Java の sd_notify()
systemdのユーザー インスタンスから起動する Java サービス ( Dropwizardを使用して実装) があります。ここまでは順調ですね。ここで、systemd の通知機能を使用してサービスの状態を認識させたいと思います( C ライブラリ関数またはシェル スクリプトとして利用できますが、最終的には両方のメソッドが環境変数によって参照されるソケットと通信します)。サービスの起動が完了したら任意のコードを実行できますが、Java 内から systemd に通知する最善の方法がわかりません。
他の開発者はこのサービスを Windows で実行しているため、通知コードが目立たず、systemd で実行していない場合に出力が発生しない場合は、ボーナス ポイントとして非常に役立ちます。