[apache]cronで指定時刻になったら.htaccessのbasic認証を解除する
cronを使って指定時間になったらbasic認証を解除したいと思い調べてやってみました。
.htaccessとcronが使えるサーバが必要になります。
まずは下準備。
.htaccess にbasic認証設定を記述
AuthUserFile /home/sample/.htpasswd
AuthGroupFile /dev/null
AuthName "Secret Area"
AuthType Basic
require valid-user
<Files ~ "^.(htpasswd|htaccess)$">
deny from all
</Files>
この状態でサイトにアクセスするとbasic認証がかかります。
次はsedを使って特定行をコメントアウトするのを検証してみます。
以下のコマンドで1~6行目の行頭に「#」をつけることができます。
まずはコマンドを実行してbasic認証部分をコメントアウトされることを確認。
sed -i '' "1,6s/^/#/g" .htaccess
sed -i.orig "1,6s/^/#/g" .htaccess
#.htaccess.origとしてバックアップを残す場合はこちら
コメントアウトされている部分を元に戻して、cron設定を行います。
- crontab用のファイルを作成
vi ~/crontab
# 9/17 22:00にbasic認証をコメントアウト
0 22 17 9 * sed -i '' "1,6s/^/#/g" /Project/xxxx/public/.htaccess
- crontabで外部ファイルを読み込ませる
crontab ~/crontab
これで指定時間になるとbasic認証が解除されます。
本来はデプロイツールを使って本番化を行うのが通常だと思いますが、お手軽本番化として使えるかもしれないですね。
9/21追記
@tkuchiki にアドバイスいただき、atコマンドでも同様のことが実現できることを知りました。
- basic_comment.sh というシェルスクリプトを用意
#!/bin/sh
sed -i -e "1,6s/^/#/g" /Project/xxxx/public/.htaccess
-iに空文字を渡さず、 -i "1,6s/^/#/g"
としたところ
command a expects \ followed by text
のエラーが発生したのですが
-i -e "1,6s/^/#/g"
とeオプションを明示的に書けばうまく変換できました。
- 実行権限追加
chmod 701 basic_comment.sh
- atコマンド実行
# 9/17 22:00に実行(日付の指定方法に注意)
at -f ~/basic_comment.sh "22:00 17.09.14"
- 指定時刻前にatqコマンドを実行するとキューに保存されているのが確認できます
atq
cronだと定期実行になるので実行後に消して置く必要がありましたがatなら1回限りなので、今回のような用途にはatのほうがよさそうですね。
@tkuchiki ありがとうございます。