OpenBSDのオンと使用cron
そしてcrontab
、保存できるかどうかcrontab(5)
ユーザー数git
同じユーザーのためのリポジトリ?
このようなタスクを実行する正しい方法は何ですか?
(正しい方向に答えるためにバイナリを再コンパイルし、良いセキュリティパラダイムに違反する必要はありませんが、システムの特定の権限を変更することに反対するものではありません。)
ベストアンサー1
すべてのユーザーのcrontabはディレクトリに保存されます。ユーザーはディレクトリに直接アクセスできず、特権コマンドを使用する必要がありますcrontab
。
バージョン管理に実際のcrontabファイルを保存する代わりにコミットフックcrontab
最新バージョンをプッシュするには実行してください。
crontab "$HOSTNAME.crontab"
最も簡単なフックはフックですpost-commit
。git rev-parse --abbrev-ref HEAD
現在の分岐検索を実行しますgit show --format=format: --name-status HEAD
。
#!/bin/sh
commit=$(git rev-parse HEAD)
branch=$(git rev-parse --name-status "$commit")
git show --format=format: --name-status "$commit" |
while read -r status filename; do
if [ "$branch" = "master" ] &&
[ "$status" = "A" -o "$status" = "M" ] &&
[ "$filename" = "crontabs/$HOSTNAME.crontab" ]; then
crontab "$filename"
fi
done
これはマージやリベースを処理せず、crontab
失敗した場合は履歴に何も登録しません。これには若干のパラダイム衝突があります。 gitには基本的に複数のブランチがありますが、特定の時間に特定のシステムでは1つのcrontabしかないからです。ロバスト性を高めるために、ライブcrontab専用ブランチを持ち、作業ブランチのcrontabファイルを変更した場合は、そのブランチにマージすることをお勧めします。