問題タブ [runit]
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.
ubuntu - ubuntuでrunitを使用してspawn-fcgiプロセスをデーモン化し、pidは毎秒変更されます
以下は、/ etc / sv / myprogram/runのrunitにある私の実行スクリプトです。
私が走ったとき:
私は別のpidを取得します。これにより、monitは毎回私にメールを送信します。
だから...どうやって解決するの?
nginx - Nginxとrunit....ベストプラクティスは何ですか
私はnginxが常に稼働していることを確認することについてかなり混乱しています。私の理解では、init.dスクリプトはnginxを開始および停止するだけです。これは正しいです?次に、ドキュメントでは、daemon=offを維持するように指示されています。
ここで、runitを使用したいと思います。以下は、runit実行スクリプトです。
新しいPIDが常に作成されていることに気付きました。
つまり、1)nginxファイルにこのステートメントがありません:
2)上記のrunitスクリプトを使用していますが、常に新しいPIDが作成されます。
だから...nginxが常に実行されていることを確認するためのベストプラクティスは何ですか。
ちなみに私はmonitを使用していますが、hteデーモンを所有するためにrunitを使用します。
テストとして、killall -9 nginxを使用してnginxを強制終了し、psaux|を実行しました。grepnginxと私が新しいpidを取得したことに気づきました。だから..私はまだrunitが必要ですか?
r - RUnitが乱数を変更するのはなぜですか?
単体テストでは、ヘルパー関数(テストデータの生成)を次のように開始します。
私は次のようにインタラクティブに単体テストを開発していました。
しかし、私が自分からテストを実行しようとすると、run_tests.R
失敗しました。set.seed(1)
コマンドにもかかわらず、私はそれを異なる乱数に絞り込みました!set.seed(1)の直後にこの行を追加しました:
本当に興味深い部分は、ランダムシードがまったく異なることです。バッチスクリプトでは、次の3つの数字だけです。
私のインタラクティブなRセッションでは、それは626要素のモンスターです。
最初の数字である501対403は、明らかに乱数ジェネレーターのタイプですが、数字の意味についてマスターリストを追跡することはできませんでした。
私の質問の核心は、ユニットテストで信頼できる乱数を生成できるようにするための最良の方法は何だと思いますか?2番目の質問はトラブルシューティングのアドバイスです:どの乱数ジェネレーターが使用されているか(そしてもっと重要なことに)どのコード/パッケージ/設定がそれを使用することを決定したかを追跡するにはどうすればよいですか?
はsessionInfo
あまり役に立たないように見えますが、いくつかの小さな違いが見られます。たとえば、TTRパッケージが含まれているのは、他の単体テストが実行されているためです。sessionInfo
バッチスクリプトからの出力は次のとおりです。最初の行は次の#!/usr/bin/Rscript --slave
とおりです。
そして、これが私のインタラクティブRセッションからの出力です。これはコマンドラインから次のように開始されR --no-save
ます。
r - RUnitまたはtestthatでテストケースを自動的に生成します
RUnitでテストケースを自動的に生成するにはどうすればよいですか?
たとえば、単純なsum()関数があるとします。
この関数を一連の異なるテストケースでテストしたいと思います。
各ベクトルの最初の2つの要素はxとyであり、3番目はsum(x、y)関数の期待される出力です。
Pythonでは、test_casesの各要素のテストケースを生成する関数を簡単に作成できますが、Rで実装する方法がわかりません。RUnitとそのドキュメントを確認しましたが、類似したものはありません。ここでの最良の解決策は何ですか?
これは私がPythonでそれを書く方法です(nosetestを使用してテストユニットを起動します):
r - 複数の相互依存パッケージでテストを実行する
複数のパッケージをテストする最良の方法は何だろうか。2つのローカルパッケージがあるとしましょう。
パッケージpkg1はpkg2に依存しています。makefileでRCMDチェックを使用してすべてのパッケージをテストします。
依存関係がないために失敗します。たとえば、Javaでは、欠落しているすべてのコードをパスに含めることができます。最初にすべてのRsrc/ pkgsをインストールできますが、これにより、Rのテストの最後にアーティファクトが残ります。
Rでそのようなテストを実行するための推奨される方法はありますか、またはすべてのパッケージをインストールすることが唯一の解決策ですか?たぶん、テストのためだけに特定のフォルダを使用する方法があるので、他のすでにインストールされているパッケージは影響を受けませんか?
r - RはTDD(RUnit)を使用して生体伝導体パッケージを開発しています
BioConductorRUnitガイドラインに従おうとしています。最小限の設定に従っているので、次のようになります。
Suggests: RUnit, BiocGenerics
説明で
BiocGenerics:::testPackage("MyPackage")
MyPackage / tests/runTests.Rにあります
といくつかのtest_XXX.RファイルMyPackage/inst/unitTests/
次のコマンドを使用して単一のテストファイルを実行した場合:
テストは実行されます(失敗する必要がある場合は失敗します)が、実行すると
コマンドは言う:
MyPackage/inst/unitTests
ただし、ディレクトリでテストを実行しないでください...
何が足りないの?
python - runit によって送信されたシグナルをキャッチする (sv stop)
多数のワーカー プロセスを実行している Python プログラムがあります。これは孤立したプロセスを避けるために適切に処理する必要があるため、すべてのワーカー プロセスをシャットダウンするシグナル ハンドラーを実装しました。
プログラムは多かれ少なかれ次のように開始します。
- プロセス プールを開始します (X 個のワーカーを開始します)
- シグナルハンドラを登録します (
signal.signal(signal.SIGTERM, my_signal_handler)
)。SIGINT
また、同じハンドラーを持つ別のシグナル ハンドラーを追加します。 - 別のスレッド ポーリング バックエンド (データベース) を開始し、タスクをプロセス プールに追加します。
- メイン スレッドで、結果のプロセス プールをポーリングします (
multiprocessing.Queue
個々のワーカーが結果を追加する結果があります)。
アイデアは、3 と 4 で開始された 2 つの別個のスレッドが、機械を介してタスクを実行し続けるというものです。
これを手動で開始して呼び出すkill -15 <pid>
かkill -2 <pid>
、すべてを正しくシャットダウンすると、プロセスがjoin()
. ドキュメントから読み取ると、rinitTERM
はプロセスに a を送信し、その後に を送信しCONT
ます。ただし、これを runit で実行すると、単に標準ok: down: <my_program>: 1s, normally up
の .
その後、手動でプロセスを強制終了すると、ログ ファイルでプロセスが正しくシャットダウンされたことを確認できます。私は何を間違っていますか?runit は、virtualenv をアクティブにするために作成した 3 行のシェル スクリプトのみを強制終了するようですが、実際の python プロセスは残します。
「実行」スクリプトを直接実行しても、実行kill
または Ctrl+C ( と同じSIGINT
) で正しくシャットダウンできます。
ruby - プルされたファイルを奇妙な状態のままにする Git プル
git で非常に奇妙な問題が発生しています。runit 管理下のサーバーで Ruby アプリを実行しています。このアプリには自動更新機能があります。git ls-remote
プルとサービスの再起動が必要かどうかを確認するために実行されます。この部分は正常に動作し、スタッフが実行され、ファイルがプルされますが、プル後、プルされたすべての変更は に残り"changes not staged for commit"
ます。レポの実行後git reset --hard
、コミットのためにステージングされた変更はありませんが、レポのローカル コピーはorigin/branch
X コミットよりも進んでいることを示しています。
この問題が発生する理由と、問題を解決する方法がわかりません。誰かが似たようなことを経験したことがありますか?任意のポインタをいただければ幸いです。
ソフトウェアは、root (root として実行される runit) として単純化するために、Ubuntu 12.04、ruby 1.9.3p448 で実行されます。ファイルには適切なパーミッションがあります。少なくとも、そのように見えます。
コードはここで見ることができます: https://github.com/radekg/rgossip_app/blob/dev/lib/updater.rbgit pull
git fetch
git reset
*更新:*
git status
戻り値:
git diff
:
それがこのコミットです: https://github.com/radekg/rgossip_app/commit/176e7cf764ff9ea0299ef75a21bb79a5bea11406
実行後、次のgit reset --hard
ようになります。
ruby-on-rails - Runit とユーザーの RVM で Unicorn を起動する
Rails App サーバーを Chef でデプロイしています。Ruby のソース インストールから RVM にスワップしたところです (デプロイ ユーザーに問題があったため)。
これで、デプロイがソートされ、アセットがコンパイルされ、バンドラーがすべての gem をインストールしました。
私が抱えている問題は、Runit で Unicorn を監督することです..
RVM は root ユーザーとしてインストールされません。次のように、デプロイ ユーザーが持っている場合にのみインストールされます。
deploy ユーザーから手動で Unicorn を正常に起動できます。ただし、runit の一部としては開始されません。
私の実行ファイルは次のようになります。私はこのSOの質問の解決策も試しましたが失敗しました..
手動で実行すると、次のエラーが発生します。
root として実行される小さなスクリプト ( gist here ) を作成しました。ただし、これを runit から呼び出すと、ワーカーが開始されますが、runit 用に 2 つのプロセスが取得され、サービスを停止または再起動できません。
ps の出力:
ここで何をすべきですか?うまく機能したmonitに戻りますか?