Closed5

Git管理している日記をcronで毎日プッシュするように

SayamaSayama

僕は、普段の日記や、読書内容のメモ書き、所感の走り書きなどを一つのリポジトリとしてGit管理しています。しかし、普段ただのメモ帳としてしか使っていないため、定期的にコミットとして記録をプッシュしたりしていませんでした。
そこで、cronを使って毎日朝の9:00にコミットをしてpushするようにしました。

このスクラップ記事はその内容をメモ程度にまとめただけですので悪しからず。

SayamaSayama

早速、話はそれますがTyporaがいい感じ

さあcronの話に入るのかと思いきや、いきなり脇道にそれようと思います。
僕は日記をMarkdownで書いているんですが、少し前まで#~*などを直接打ち込んだりしていて非常に面倒なことをしていました[1]。そこで、いい感じにスラスラ書けるMarkdoen Editor「Typora」をここ1年使ってみたんですが、そこそこ満足できたので、ちょこっとメモしておこうと思います。

見出しや箇条書き、リンクやテーブルなど、ショートカットキーでサクサク書けますし、デフォルトで用意されているスタイルの他、自分好みなCSSを当てることもできます。しかし、$14.99で3つまでのデバイスで使用可能なライセンスを購入する必要があるため無料ではありません。残念。。。
こちらbrew install typoraで簡単に始められるので、15日間のトライアル期間、試してみてはいかがでしょうか?

脚注
  1. Zennの投稿もショートカットキーでサクサク書きたいです。何かいいやり方あったりするんでしょうか? ↩︎

SayamaSayama

cronを使ってみる

早速cronを使ってみましょう。環境はMacです。

# cron の設定を行います
$ crontab -e
crontab: no crontab for veryv – using an empty one
crontab: “/usr/bin/vi” exited with status 1  # このようなエラーが出ることがあります
# 環境変数 EDITOR に適当なエディターを指定するとよいです。.zshrc などに追記してもよいです。
$ export EDITOR=vim

$ crontab -e
# crontab が起動できるはずなので、下の文字列を記載して、1分毎に「Hello」と出力します。
* * * * * echo Hello

# ちゃんと Hello が出力されているか確認してみます
$ tail -f /var/mail/[ユーザー名]
From *************@*************.local  Sat Dec 24 00:06:00 2022
Return-Path: <*************@*************.local>
X-Original-To: *************
Delivered-To: *************@*************.local
Received: by *************.local (Postfix, from userid 501)
	id D5E3F18FEE8C; Sat, 24 Dec 2022 00:06:00 +0900 (JST)
From: *************@*************.local (Cron Daemon)
To: *************@*************.local
Subject: Cron <*************@*************> echo Hello # 指定したコマンドを実行してくれていそうです
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=*************>
X-Cron-Env: <USER=*************>
Message-Id: <20221223150600.D5E3F18FEE8C@*************.local>
Date: Sat, 24 Dec 2022 00:06:00 +0900 (JST)

Hello # うまくいってそうですね

# git commit & push をするシェルスクリプトを書きます
$ vim path/to/git_commit_and_push.sh
#!/bin/sh

git -C ~/path/to/repository add -A
git -C ~/path/to/repository commit -m "`date`"
git -C ~/path/to/repository push

# 先ほどの cron の設定を、このシェルスクリプトを実行するように変更します
$ crontab -e
* * * * * echo Hello
↓
* * * * * source path/to/git_commit_and_push.sh

# 実行できているかみてみます
$ tail -f /var/mail/[ユーザー名]
From *************@*************.local  Sat Dec 24 00:11:00 2022
Return-Path: <*************@*************.local>
X-Original-To: *************
Delivered-To: *************@*************.local
Received: by *************.local (Postfix, from userid 501)
	id 4BD1B18FF10A; Sat, 24 Dec 2022 00:11:00 +0900 (JST)
From: *************@*************.local (Cron Daemon)
To: *************@*************.local
Subject: Cron <*************@*************> source path/to/git_commit_and_push.sh
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=*************>
X-Cron-Env: <USER=*************>
Message-Id: <20221223151100.4BD1B18FF10A@*************.local>
Date: Sat, 24 Dec 2022 00:11:00 +0900 (JST)

/bin/sh: path/to/git_commit_and_push.sh: Operation not permitted  # 権限周辺でエラーが発生したみたいです

システム環境設定 > セキュリティとプライバシー > プライバシー > フルディスクアクセス
「+」ボタンを押して /usr/sbin/cron を追加してあげます。※ command + shift + G でファイル検索すると楽です。

# これで cron を使って自前のシェルスクリプトを実行できるはずです
$ tail -f /var/mail/[ユーザー名]
From *************@*************.local  Sat Dec 24 00:22:02 2022
Return-Path: <*************@*************.local>
X-Original-To: *************
Delivered-To: *************@*************.local
Received: by *************.local (Postfix, from userid 501)
	id 0AB6318FF706; Sat, 24 Dec 2022 00:22:01 +0900 (JST)
From: *************@*************.local (Cron Daemon)
To: *************@*************.local
Subject: Cron <*************@*************> source path/to/git_commit_and_push.sh
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=*************>
X-Cron-Env: <USER=*************>
Message-Id: <20221223152201.0AB6318FF706@*************.local>
Date: Sat, 24 Dec 2022 00:22:01 +0900 (JST)

[master 3fcaccb] Sat Dec  24 00:22:01 JST 2022
 1 file changed, 4 insertions(+)
 create mode 100644 sample.md
To github.sub:Sayama0310/Memo.git
   726cfb2..3fcaccb  master -> master  # ちゃんとプッシュできていそうです

Reference :

SayamaSayama

最後に

今回は使いませんでしたが、道中見つけたある機能を紹介しようと思います。
git pushgit pull をするときにパスワードを要求されることがあります。そこで「Git Credential Manager Core」というものを使うと、これがパスワードを覚えておいてくれるらしく、毎回要求されなくなるみたいです。
ちょっと使ってみたいので、勉強しておきたいですね。いつかやります!!

Reference :

SayamaSayama

cron とは

UNIX系OSで標準的に備わっている常駐プログラムで、ユーザーが設定した日時に従って知って意されたプログラムを起動します。

以下のようにプログラムの起動タイミングを設定することができます。

フォーマット

分 時 日 月 曜日 コマンド

指定内容

項目
0 ~ 59
0 ~ 23
1 ~ 31
1 ~ 12
曜日 0 ~ 7 (0,7は日曜日)
コマンド 実行したいコマンド

指定方法

指定方法 設定例 実行タイミング
リスト 0,15,30,45 「分」フィールドで指定した場合は、0分、15分、30分、45分を意味します。
範囲 1-5 「曜日」フィールドで指定した場合は、1 (月)、2 (火)、3 (水)、4 (木)、5 (金) を意味します。
間隔 1-5/2 「時間」フィールドで指定した場合は、1時、3時、5時を意味します。

Reference

このスクラップは2023/01/09にクローズされました