質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Bitcoin

Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

Q&A

解決済

2回答

1307閲覧

Rubyプログラムのデーモン化

Kota_Sato

総合スコア4

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Bitcoin

Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

0グッド

0クリップ

投稿2021/01/03 01:41

編集2021/01/03 02:32

Rubyで作ったBitcoin取引プログラムをずっと稼働させたい

題の通りです。
Bitcoinの取引プログラムを作ったのでどこかで永遠に稼働しておいてほしいのですがその方法が分かりません。
Node.jsで作ったときにはforeverという便利なシステムがあったためRubyにも当然あるだろうと思っていましたが現在その永遠稼働をどうすれば実行できるのかという問題に衝突しています。

btc.rbにプログラムをかいたので
ruby btc.rb を実行すれば確かにずっと稼働するようにはなっていますが、そうではなくローカル環境で自動で稼働していてほしいです。

##コードの意図
get_priceという関数で現在のBTC価格を取得
@prices配列に格納、配列の長さは常に4
buy_or_sell関数を作り配列の中身次第で売買してくれます。
それを任意の秒ごとに行ってくれます。

該当のソースコード

コード自体に問題はないと思うため一部を乗せさせていただきます。
こちらのbtc.rbファイルにすべてのコードが乗っています

https://github.com/07130918/Bitcoin-Automatic-trading-Bitflyer-/blob/master/btc.rb

ruby

1while true 2 begin 3 current_price = get_price 4 @prices << current_price 5 @prices.shift(1) if @prices.length >= 5 6 puts "#{@prices}" 7 buy_or_sell if @prices.length >= 4 8 sleep(interval) 9 rescue => e 10 puts e 11 puts 'while trueでエラー発生 処理移行' 12 next 13 end 14end

試したこと

Process.daemonなど「ruby デーモン化」で調べて出てきた情報はあらかた試してみましたが理解が足りずうまくいきません 

補足情報(FW/ツールのバージョンなど)

OS: windows 10 Pro
ruby version 2.7.2
Railsは使っていません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/01/03 01:59

どこかで勝手に動いていてほしいとのことですが、動かしたい環境はお手元の Windows マシン (デスクトップ? ノート?) でしょうか? また、再起動しても自動的に起動して、ログオフやスリープしても動き続けてほしいってことでしょうか?
Kota_Sato

2021/01/03 02:30

はい、曖昧で申し訳ございません ローカル環境でずっと稼働し続けてほしいです。 自動的に起動してくれるとなおの事良いです。
hoshi-takanori

2021/01/03 02:37

パソコンはデスクトップですか? ノート? ログオフやスリープ時はどうしてほしいのでしょうか? なお、「デーモン化」だとたぶん UNIX 系の OS 用の記事ばかり出てくると思いますので、「Windows サービス化」というキーワードで検索するといいと思います。
Kota_Sato

2021/01/03 02:54

ノートです。ログオフ、スリープ時共にプログラム自体は稼働していてほしいです。 なるほど、ありがとうございます。
guest

回答2

0

参考情報

  • BestGems Pickup! 第6回 「daemons」 

https://www.xmisao.com/2013/09/28/bestgems-pickup-daemons.html

  • whenever による定時バッチ処理

https://qiita.com/j-sunaga/items/56811a39a572c3276b06

  • Ruby On Railsで、cronoを使って最小手順でバッチ処理を作る

https://snjxnksm.github.io/blog/2019/05/15/usecrono.html

  • イマドキのジョブスケジューラについて考える

https://tech.medpeer.co.jp/entry/2017/02/06/045738

投稿2021/01/03 02:23

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Windowsであれば、rubyw ファイル名で、ウィンドウを出すこと無く動き続けます。

putsしても見えませんので、ファイルに書くなりなんなり。

投稿2021/01/03 01:58

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kota_Sato

2021/01/03 02:51

なるほどです。windowsです。 そうした場合コマンドプロンプトを閉じると止まってしまいますか?? また、putsで取引の状況をターミナルに出力しているのでそれを確認したい場合はどうすればよいでしょうか? node.jsのプログラムの場合はvimからコンソール出力を確認していたのですが、Rubyでもそのようなことがしたいと考えています。
otn

2021/01/03 02:56

> そうした場合コマンドプロンプトを閉じると止まってしまいますか?? いいえ。 > また、putsで取引の状況をターミナルに出力しているのでそれを確認したい場合はどうすればよいでしょうか? 「ターミナルに出力したものを見たい」と「ターミナルを閉じても動き続けて欲しい」は両立しませんが、どちらが希望ですか? 後者であれば、 > putsしても見えませんので、ファイルに書くなりなんなり。 と書いたとおりです。 > node.jsのプログラムの場合はvimからコンソール出力を確認していたのですが、Rubyでもそのようなことがしたいと考えています。 これはよく分かりません。具体的にどういうことでしょうか?
Kota_Sato

2021/01/03 03:22

「ターミナルに出力したものを見たい」と「ターミナルを閉じても動き続けて欲しい」は両立しませんが、どちらが希望ですか? >ターミナルを閉じても動き続けてほしいです。しかし出力結果に関してもターミナル以外の方法があれば確認したいです。 node.js~~ これはよく分かりません。具体的にどういうことでしょうか? >node.jsの場合foreverというシステムを使いファイルを永久稼働させることができました。 その際にforever list コマンドで現在稼働中のファイルを確認し、そのファイルをvimコマンドで覗くと永久稼働させているファイルでコンソールに出力した結果が見れるのです。私はそこに取引状況などを出力していました。 Rubyにもこのように永久稼働させながらその出力結果を別のファイルに蓄積させるシステムはないのでしょうか?
otn

2021/01/03 03:25

それは、 > putsしても見えませんので、ファイルに書くなりなんなり。 と書いたとおりです。 ファイルへの書き方が分からないということでしょうか?
Kota_Sato

2021/01/03 03:39

いえ、そうではなく稼働はしてもらい結果を別の場所(ターミナル以外でも可)で確認、蓄積するシステムはRubyにはないのでしょうか?? node.jsでconsole出力をvimで確認できるようにターミナルに出力してしまうことは避けたいのです。
maisumakun

2021/01/03 03:47

> そのファイルをvimコマンドで覗くと永久稼働させているファイルでコンソールに出力した結果が見れるのです。 Rubyから保存したファイルに対して同じことを行えばいいだけではないでしょうか?
otn

2021/01/03 03:48

意味がわかりません。 ファイルに書いて、参照にしたいときにそのファイルを見るという方法で何がまずいのでしょうか?
Kota_Sato

2021/01/03 23:56

ファイルに書いて、参照にしたいときにそのファイルを見るという方法で何がまずいのでしょうか? >なにもまずくありません。 その方法を試してみようと思います。
otn

2021/01/04 10:43

nodeを使っているときも、ファイルに書いて、それをvimで参照していたのですよね? puts 等の出力先(標準出力)をファイルに書くように変更するには、 $stdout = $stderr = open("D:/xxxx/yyyy.log","a") です。
Kota_Sato

2021/01/05 03:51

解決しました。 ありがとうございました。 Fileクラスについて書き出し以外にも勉強しよう思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問