javaでcrontab

javaでwebページを制作するときに何かしらのバッチ処理をしたいときって結構あると思うんですが
javaで書いたバッチ処理をcronで回すのって結構面倒くさかったりする。パスの設定とかいろいろ書かなくちゃいけないしそれでうまく動かないときとかもある

どうせならwebページを作ったときにひとつのページとしてcronの処理を書いてURLにアクセスしただけで実行させたい!って思うのでtomcatBASIC認証させて実行するcronを書けば簡単!!

ということで書いてみました

設定は
javaのプロジェクトにあるweb.xmlを(※tomcatのweb.xmlじゃないです)

<security-constraint>
  <web-resource-collection>
    <web-resource-name>crontab</web-resource-name> ←なんでもいい
    <url-pattern>/cron</url-pattern> ←アクセス制限をしたいURL
  </web-resource-collection>
  <auth-constraint>
    <role-name>cron</role-name> ←この設定の名前
    </auth-constraint>
</security-constraint>
<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>crontab</realm-name> ←なんでもいい
</login-config>
<security-role>
  <role-name>cron</role-name> ←この設定の名前
</security-role>

次にtomcattomcat-users.xml

<tomcat-users>
  <role rolename="cron"/>
  <user username="ユーザ名" password="パスワード" roles="cron"/>
  <!-- rolesは上の設定でつけた名前 -->
</tomcat-users>

のroleとuserのところを追加する

これだけで指定したURLにBASIC認証の機能が!
設定を有効にするためにtomcatはrestartしてくださいね!

そんでcrontabの設定で

00 4 * * * /usr/bin/wget -q --delete-after http://ユーザ名:パスワード@localhost/hoge/cron

朝の4時にwgetで指定したurlにアクセスするだけ!(-qは何も出力せず --delete-afterはダウンロードしてきたファイルを削除する)
これだけでcronの設定はばっちりです!しかもlocalhostへのアクセスなのでパスワード暗号化しなくても大丈夫!(なはず・・・)