送出される可能性があることに注意してください。タイムスタンプを返します。頼って変換を行います。タイムスタンプを取得するメソッドはありません。明示的な書式文字列で制御された、日付および時刻を表現する文字列を返します。date.strftime`と等価です。書式文字列を指定できます。オブジェクトを返します。指定することもできます。引数に指定しなくてはいけません。両端を含まない範囲に収まっていなくてはなりません。タイムスタンプの値を返します。timezones.'''systemdのユーザモードを使うBotプログラムが通信環境が不安定になると落ちるのでcronとかshellのループを使ってプログラムを監視していたのですが、VPSサーバのロード負荷が高い場合、複数Botが立ち上がったりなどあまり連携がよくありませんでした。そんななかsystemdでユーザモードが使えることがわかったので使ってみることにしました。systemdで有効なのはデーモンの再起動機能です。ユーザモードでBotを立ち上げると、何らかの原因でプログラムが終了してもすぐに再起動してくれます。WIKIから引用ですが、わかりやすい説明があります。プロセスとは別のプロセスを起動します。ユーザーユニットからシステムユニットに依存したり参照することはできません。systemモードとuserモードは排他的関係でお互いに独立したシステムというとになります。userモードで使えるディレクトリにも制約があります。WIKIで見てみるとつぎのようになっています。ユーザーが配置する、そのユーザーのサービスこのことを念頭において作業に取り掛かります。テストにオレオレサービスを作ってみます。%nRestart=alwaysStandardOutput=journalStandardError=journalType=simple[Install]WantedBy=default.target前回、設定したコマンドラインメールからEmailレポートします。$1)ERRMAIL起動します。oreoreservice.serviceEmailが送られるかどうかチェックしてみます。SIGKILL最後にsystemdのユーザインスタンスの自動起動をONにします。これでブート時に自動実行できるようになります。username以上です。追記1:systemdの資料を読んでいたらもっと良い方法を思いつきました。%i[Install]WantedBy=default.targetサービスを登録します。status-report@oreoreservice.service.serviceテスト:まず起動します。oreoreservice.serviceステータスで起動していることを確認します。SIGKILLつぎにパーミッションを変更して実行できないようにします。killシグナルを送り再起動させます。当然ながらプログラムが実行できないのでエラーになりUnitのOnFailureオプションが発動されます。追記2:journalctlでログを取る場合、次のエラーが出ます。notice.このエラーを修正するには次のようにします。/etc/systemd/journald.conf[Journal]Storage=persistent...コンテナを再起動します。/user.slice/user-1000.slice/user@1000.service/bitmex_databaseこのように正常にログを出力できるようになります。cgroup’はlxc側の問題なので現在のところプログラムの実行には影響ありません。メール通知Muttでコマンドラインからメールを送信systemdにはユーザモードがありBotなどをユーザ権限でデーモン化することができます。systemdを使うことで再起動機能やログの管理等のメリットが享受できます。Botが原因不明で止まった場合メールで知らせる機能を追加しようと考えてコマンドラインから使えるメールソフトを探してみました。そのなかでMuttがもっとも機能的に受け入れられたので採用することにしました。ところが設定が難しくなかなかメールサーバにログインできず、いろいろ検索した結果できるようになりました。そのときのテンプレート用に使えるファイルと載せておきます。Muttのユーザ用の設定ファイルは$HOME/.muttrcです。皆様におかれましては益々ご清祥の事とお慶び申し上げます。お心のこもった品物を頂戴いたしまして誠にありがとうございます。皆様どうぞご自愛くださいませ。書中をもちまして御礼を申し上げます。mail.txtBitmexのチャートをデータベースにインポートする以前、投稿したBinanceでデータベース作成と同じ要領ですがBitmexの場合はいくつか制約がありそれをクリアしなければなりません。1分足、5分足、1時間足、日足以外のチャートはほかのチャートを利用して作成する一回につき10080件以上のデータを取ることができない150回/5分の制限があるこの3つの制約をクリアしたプログラムを作成しました。Pandasのリサンプリングで不完全なOHLCVを作らないため最大公約数として日足を基準にしています。main()10分〜15分程度で各時間足のcsvファイルを書き出します。これをmysqlimportでデータベースにインポートします。$ndoneこのスクリプトを作成にあたり、次のサイトを参考にしました。APIで取得したOHLCVデータから任意の時間足を作成する追記:numpyとPythonのListとどちらが速いのか分かりませんがつぎのようにnumpyに置き換かえてみます。_volume)調べてみると次のようにありました。NumPyのndarrayは多次元配列を扱うことを目的としたクラスで、事前にメモリ確保しています。np.append関数を使用すると、元のshapeが破壊されてしまうため、要素のコピーが発生して遅くなることがあります。一方で、Pythonのlistは可変長の要素を保持するベクタ型です。大きめの要素を事前に確保するので、毎回のコピーは発生しません。https://deepage.net/features/numpy-append.htmlnumpyは計算は速いが可変長のリスト処理は遅いということです。102)はカスタムカーネルを使っているためFirewallが使えません。カスタムFirmwareを検索してみたところ、だいぶ前に開発が止まっていました。カスタムカーネルを入れ替えればいいのですが、そもそもリスクが大きいことと正規ファームウエアによるチェックでダッシュボードにアクセスできないという問題があるらしいのです。そこでブリッジにFirewallいれて同等の機能をもたせようと思案しても2つ以上ポートのある機材は手元にありません。ARPなら手持ちに機材で対応できるので設定することにしました。WZR-HP-AG300Hです。このルータはLAN用のアダプタとWAN用のアダプタの2つのイーサネットデバイスを持っています。ルータの中には1つのイーサアタプターをVLANでWANとLANを分けている機種もあります。ARPのブリッジ化をしてみます。net.ipv4.conf.br-lan.proxy_arp=1DebianのWIKIにすべて書いてあるのでそれを参考にセットアップします。BridgeNetworkConnectionsProxyArp手動で行うには次のようにします。br-lanip_forwardは大抵のルータで1(enable)になっているはずなので設定の必要はありませんが明示的に設定しておきます。DebianのWIKIにもありますがひとつだけ問題があります。Relayする必要があります。Relay機能があるのでこれを使います。ARPのブリッジの確認ができたらダッシュボードでOpenWrtの設定をします。Routes/etc/sysctl.d/99-proxy-arp.confnet.ipv4.conf.eth1.proxy_arp=1net.ipv4.conf.br-lan.proxy_arp=1リブートして設定を反映させます。Firewallは悩みましたがとりあえずフォワードで行けそうです。いい方法がありそうですが今のところ思いつきません。WIKIをみるとmDNSもリレーが必要のようでファイラではNASが見えません。アドレスを打ち込めば使えますが少々不便です。解決方法は調査中です。速度が2/3程度になります。経路が複雑になった上にiptablesでフィルタをかけているのでどうしても遅くなります。新しいVPSの設定はほぼ完了したのでバックアップ周りの設定をしました。WrodPressのデータなどをVPN経由のFTPで旧VPSへバックアップとるためにpure-ftpdの設定をしました。問題はデーモンモードだとdbファイルを読めませんでした。原因が分からず調べまくってるうちにできてたみたいで今ひとつ納得がいきません。そこでinetdの起動にかえたところ納得できる結果になりました。100ホームディレクトリのないユーザの作り方は検索で調べて次のようにしました。ftpのモードにはアプティブモードとパッシブモードがあります。VPN経由でFirewallの状態によってはパッシブモードが使えない場合があります。pootlepress.。