LoginSignup
1
2

More than 3 years have passed since last update.

cronでGithubにPushするプロセスを自動化する

Posted at

やったこと

Pythonとcrontabを使って、データファイル(pklフォーマット)を一週間に一回(土曜日の午後7時)に更新されるようにしました。

毎週更新されるデータをGithubに自動的にPushしたく、同じくcrontabを使ってやってみた。

環境

  • Linux Mint 19
  • Python 3.6.9
  • git 2.17.1

GithubでSSH接続する

ssh接続する方法はたくさんネットに上がっているので割愛します。
(参考: GitHubにssh接続できるようにする)

GITコマンドでプッシュしてみる

ssh接続が出来たら、gitコマンドでPushしてみる。

アップしたいデータファイルはplayers_data.pklというpythonのpickleというモジュールを使用したフォーマットです。

git add players_data.pkl
git commit -m "最初のコミット"
git remote add origin git@github.com:<ユーザー名>/<レポジトリ名>
git push origin master

自動化のPythonコードを作成

この一連の作業を自動化するPythonのコードを書きます。

使用するのはsubprocessというModuleで、bashコマンドをPythonで実行することが出来ます。(参考:Python の subprocess

new_data.py
import os
import datetime
import subprocess as cmd

#input values
new_date = datetime.datetime.now().strftime('%Y%m%d')
current_dir = os.getcwd()

#Subprocessで自動化
cp = cmd.run(f"git -C {current_dir} add players_score.pkl", check=True, shell=True)
cp = cmd.run(f"git -C {current_dir} commit -m 'scoresheet updated on {new_date}'", check=True, shell=True)
cp = cmd.run(f"git -C {current_dir} push origin master", check=True, shell=True)
print('Githubへのアップ成功!')

この段階でpython3 new_data.py をbashで実行し、ちゃんとGithubにアップされているか確認してもよいでしょう。

SSH のラッパースクリプト(git-ssh.sh)を作成

ここが今回引っかかったところなのですが、crontabでgit push origin masterを実行しようとすると、以下のようなエラーがでます。

Command 'git -C /path/to/folder/ push origin master' returned non-zero exit status 128.

cron から自動で git push するを参考にすると、

cron から自動で git push したい時、ssh の秘密鍵を明示的に指定して git push する必要があります。

というわけで以下のSHファイルを.sshのあるフォルダーに置いてやることが必要です。

/path/to/.ssh/git-ssh.sh
#!/bin/sh
exec ssh -oIdentityFile=/path/to/.ssh/id_rsa "$@"

このSHファイルに実行権限を与えることも必要。

cd /path/to/.ssh
chmod +x git-ssh.sh

SHファイルでPythonを動かす

直接Crontabでやってもいいのですが、今回はSHファイルを作成してPythonを動かすようにします。

scripts.sh
#!/bin/sh
cd /path/to/folder
export GIT_SSH=/path/to/.ssh/git-ssh.sh
python3 new_data.py > output_newdata.txt

crontabでSHファイルを定期的に実行する

最後にcrontabで定期実行の方法です。

まずcrontab -eをbashで実行し、crontabを開けます。

Cronの設定の仕方は割愛しますが、毎週土曜日の午後7:00にscripts.shを定期実行したいときは下記のようにします。(参考:crontabのガイドライン

00 19 * * 6 bash /path/to/folder/scripts.sh

これでうまく定期実行のできるようになりました。

参考サイトまとめ

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2