回答編集履歴

1 SSI に関する確認を追記

mit0223

mit0223 score 2772

2017/01/11 10:50  投稿

SSI の設定はできていますか?  
 
[SSI を許可するためのサーバの設定](https://httpd.apache.org/docs/2.0/ja/howto/ssi.html#configuring)に従って設定できているかを確認してください。  
 
また、 Apache のログファイルにはエラーメッセージは出ていませんか?  
 
---  
ちなみに  
 
```#!/bin/sh  
if [ -f lookfile.txt ];then  
sleep0.19  
else touch lookfile.txt  
```  
 
このコードでは、排他制御できていないと思われます。  
 
[https://teratail.com/questions/46283](https://teratail.com/questions/46283)
のときの私の回答からコピペですが、
シェルスクリプトでロックで排他制御して、1個ずつしか処理しないようにする技法ということであれば、 flock コマンドで実装するのが良いかと思います。 flock コマンドで実装する場合の lock, unlock 関数の例を示します。
```shell script
GIT_LOCK_FILE=/var/run/lock.txt
GIT_LOCK_TIMEOUT=600
# prepare FD for lock.
if ! exec {lockFd}>> $GIT_LOCK_FILE; then
   echo "$datestr fail to open lock file($GIT_LOCK_FILE)." 1>>$LOG 2>&1
   exit 1
fi
lock() {
   if ! flock-w $GIT_LOCK_TIMEOUT $lockFd >/dev/null 2>&1; then
       echo "$datestr fail to aquire lock, another git pull process may be running." 1>>$LOG 2>&1
       return 1
   fi
   return 0
}
unlock() {
   flock -u $lockFd
}
```
flockコマンドでのロックの実装は、シェルスクリプトで旧来から常套手段とされているロックファイルの存在だけを確かめる方法と比べると、以下のメリットが有ります。
- タイムアウト処理を実装してくれる(上記のコードで 10 分待ってロックが取れなければ諦めます)
- ロックを保持しているプロセスが unlock を実行せずに異常終了してもロックが開放される

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る