株式投資でしっかり稼ごうと思うと毎日、同じようなサイトで情報を収集し、株価のチャート、シグナルをチェックするということを繰り返す必要があります。
ただ、私は毎日同じことをコツコツ繰り返すのが非常に苦手なタイプなので、単純な作業はプログラムに任してしまいたいということになります。私がプログラミングなどを勉強するモチベーションは大抵これです。
これまでのブログで「株ドラゴンのランキングをスクレイピングしてくる」「株価をスクレイピングしてきて、チャートを描く」と行ったことをプログラム化してきましたが、今回はそのプログラムの実行も自動で定期的に行いたいと思った次第です。
ということで、UNIX系のOSに入っているバッチ処理サービスの一つであるcron(クーロン)を使って定期的なプログラム実行を行ったのですが、めちゃくちゃ躓いたのでブログに書き留めておきたいと思います。
cron導入で躓いた点
cronはUNIX系のOS(MacとかLinuxとか)に入っているプログラムのひとつです。
指示した時間に指定したプログラムを動かしてくれるもので、「プログラム 定期的 実行」みたいな感じでGoogle検索するとだいたい出てきます。
結構多くの人がcronについて書いてくれているのですが、色んな人が書いてくれているおかげで逆にめっちゃハマりました。
結論から言うとアホみたいな話なのですが、重要な点はUbuntu16.04LTSと18.04でcronサービスのコマンドが変わるです。
未だに16.04LTSを使っている私が悪いのかもしれませんがなかなか書いてくれている人がいなくてstack over flowでようやく気づきました。
Start crond.service on Ubuntu 16.04
cronサービスのコマンドには主に起動、ステータス確認、停止の3つがあるのですが、以下のようにUbuntu18.04と16.04で異なります。
#Ubunt18.04
$ sudo service crond start #cronの起動
$ sudo service crond status #cronのステータス確認
$ sudo service crond stop #cronの停止
#Ubuntu16.04
$ sudo service cron start #cronの起動
$ sudo service cron status #cronのステータス確認
$ sudo service cron stop #cronの停止
Ubuntu16.04でsudo service crond statusと実行しても以下のように’No such file or directory’とでてしまい、cronが起動しているのかどうかすら全然わかりません。
hoge@hoge-ubuntu:~$ sudo service crond status
● crond.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
私は、cronがそもそもインストールされていないのかな?とかcronを削除してしまったのかなとか色々悩んで時間を浪費してしまいました。
Ubuntu16.04でのcronの設定手順
環境
OS:Ubuntu 16.04 LTS
cronサービスの起動
まず、Linux上でcronを使用するためには、cronのサービスが起動していなければなりません。
上述の通りcronのサービス起動、ステータス確認、停止は以下のコマンドになります。
$ sudo service cron start #cronの起動
$ sudo service cron status #cronのステータス確認
$ sudo service cron stop #cronの停止
まずはsudo service cron statusでステータスの確認を行います。
起動していなければsudo service cron startで起動しましょう。
$ sudo service cron status #ステータスの確認
#停止している時
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: ena
Active: inactive (dead) since 日 2019-07-07 02:03:33 JST; 14h ago
Docs: man:cron(8)
Process: 7681 ExecStart=/usr/sbin/cron -f $EXTRA_OPTS (code=killed, signal=TER
Main PID: 7681 (code=killed, signal=TERM)
#起動している時
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since 日 2019-07-07 16:28:50 JST; 5s ago
Docs: man:cron(8)
Main PID: 16946 (cron)
Tasks: 1
Memory: 384.0K
CPU: 991us
CGroup: /system.slice/cron.service
└─16946 /usr/sbin/cron -f
cronの設定
cronの設定は基本的にこちらのサイトを参考にしました。
Ubuntuでのcronの使い方
私もcron.dを用いるほうがよいと思うので、cron.dの内容を記述します。
上記のサイトとほぼ重複しますが、順番にコマンドを書いていきます。
cron.dに拡張子のないファイルcron_testをコピー
$ sudo cp /etc/crontab /etc/cron.d/cron_test
cron_testの編集
$ sudo vi /etc/cron.d/cron_test
私の元ファイルcron_tabにはコメントとSHELL=/bin/sh、PATHが記述されていました。
そこにコマンドを追記しました。
また、test.shの実行結果をcron.logに出力するようにしています。
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
# 10分ごとに実行する
*/10 * * * * userA /bin/bash /home/userA/test/test.sh >> /home/userA/test/log/cron.log
test.shの作成
cron_testに/home/userA/test/にあるtest.shを実行するような記述をしていますので、/home/userA/にtestフォルダを作成し、test.shファイルを作成します。
最初は動作するか確認したいと思いますので、test.shには’hello world’を出力するように書いておきます。
echo 'hello world'
cron.logの作成、確認
cron_testに/home/userA/test/log/cron.logに結果を出力するように記述したので、logフォルダとcron.logファイルを作成します。
sudo service cron startを実行して、しばらく待つとcron.logにhello worldと記述されているはずです。
$ cat /home/userA/test/log/cron.log
>> hello world
以上、役に立った場合は下のボタンをポチっとしてもらえると嬉しいです。

