Amazon linuxで/etc/cron.d/配下または/etc/cron.hourly/配下にcronを設定する.
cronの設定方法はいくつかあって、どこにどう設定すればいいのかの、ベストプラクティスはまだよく分かっていません。
いったんpart1として/etc/cron.d/と/etc/cron.hourly/はいかに設定する方法をまとめておきます。
環境
まずはcron化したり作ると作成します。
僕の常套手段として、適当なpythonスクリプトを作ってslackに通知させます。
ログを出力してtail -f でもいいんですが、ログを出力するために画面を2つ出さなきゃいけないのがちょっと面倒くさいので、slackで受動的に確認します。
cron.d配下
cron化させるslack通知pythonスクリプト
import requests import json webhook_url = "https://XXXXXXXXXXXXXX" requests.post(webhook_url, data = json.dumps({ 'text': u'Test', # 投稿するテキスト 'username': u'me', # 投稿のユーザー名 'icon_emoji': u':ghost:', # 投稿のプロフィール画像に入れる絵文字 'link_names': 1, # メンションを有効にする }))
これは/home/ec2-user/slack.py
においておきます。
cronがrootユーザーとして実行させることにするので、実行権限を付与しておきます。
$ sudo chmod 755 /home/ec2-user/slack.py
cron設定
続いて$ sudo vi /etc/cron.d/slack.py
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed * * * * * root /usr/bin/python36 /home/ec2-user/slack.py
これだでけOKです。
特にcronのrestartとかいらないです。
これで1分ごとにslack通知が流れてきました~
cron.hourly配下
cron化させるslack通知pythonスクリプト
こちらは同じものを使っていきます。
配置場所も同じく/home/ec2-user/slack.py
です。
import requests import json webhook_url = "https://XXXXXXXXXXXXXX" requests.post(webhook_url, data = json.dumps({ 'text': u'Test', # 投稿するテキスト 'username': u'me', # 投稿のユーザー名 'icon_emoji': u':ghost:', # 投稿のプロフィール画像に入れる絵文字 'link_names': 1, # メンションを有効にする }))
cron設定
$ sudo vi /etc/cron.hourly/slack
を作成します。
ファイルの中身は以下です。
#!/bin/sh /usr/bin/python36 /home/ec2-user/slack.py
ここで罠なのですが、このファイル自体にも実行権限を与えないと動かないみたいです。
$ sudo chmod 755 /etc/cron.hourly/slack
hourlyなので、1時間に1回なのですが、確認のために最大1時間も待つなんてとんでもないです。
以下より、一時的に設定を変更します。
$ sudo vi /etc/cron.d/0hourly
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ 30 * * * * root run-parts /etc/cron.hourly
今回は**:30のときに実行されるように変更しました。
実際通知が流れてきました。
成功です。