揮発性のメモ2

知識をメモ書きしておく

プロセス間での排他制御


生成 ロック アンロック 共有
メモリ
備考
ファイルロック open flock(fd,LOCK_EX) flock(fd,LOCK_UN) 不要 他言語と連携可 600
名前付きセマフォ sem_open sem_wait sem_post 不要 -pthread 16
名前なしセマフォ sem_init sem_wait sem_post 必要 -pthread 16
Pスレッドのmutex pthread_mutex_init pthread_mutex_lock pthread_mutex_unlock 必要 -pthread 15

共有メモリの確保手段

  • POSIX (shm_open 〜) ← こっちを使う
  • System V (shmget 〜)

apacheのエイリアスが被っているときは 長い方から書く

AH00671: The Alias directive in C:/xampp/apache/conf/extra/httpd-xampp.conf 
at line 116 will probably never match because it overlaps an earlier Alias.

こういうエラーがでた


httpd.confとかに

    Alias /hoge "C:/hoge/"
    Alias /hoge/piyo "C:/piyo/"

こんな風に書いていると、先に /hoge がマッチするので /hoge/piyo は見えない。
なので、順番を逆にしてマッチ条件がきつい方から先に書くと良い

    Alias /hoge/piyo "C:/piyo/"
    Alias /hoge "C:/hoge/"

DOSで古いファイルを削除する

windosの指定日付より前のファイルを削除する - Qiita
を参考に


c:\hoge\logs 以下にある *.log で99日以上古いファイルを再帰的に削除

forfiles /P "c:\hoge\logs" /D -99 /S /M "*.log" /C "cmd /c del @file"
/P
起点とするディレクト
/D
日付か日数を指定。 -1 は昨日のファイルを含む。 24時間前とかではなく昨日
/S
再帰
/M
マスク指定
/C
実行するコマンド。 delはcmdの内蔵コマンドなので/cが被ってしまうのな

注意事項

/C のコマンドが実行される時のカレントディレクトリは そのファイルがあったフォルダになるので気を付ける。
echo @fileとかでパスが出ないからおかしいと思ったんだ

DOSでmysqlのログをローテートする

スロークエリとかエラーのログをローテートする
mysql_slow_20180802.log みたいにリネームする

set NOWDATE=%DATE:/=%

rename mysql_error.log mysql_error_%NOWDATE%.log
rename mysql_slow.log mysql_slow_%NOWDATE%.log

mysqladmin.exe -uroot flush-logs

ついでに圧縮とかすると格好いいんだけど、面倒なので圧縮フォルダにする。NTFS万歳


flush-logsをすると、「ログを閉じて開く」というアクションをする。
これを実行するまではリネームしても同じファイルに書かれ続ける。
なんかrootユーザを指定しないと動かなかった。

flock()

flock() - 揮発性のメモ
LOCK_NBを使うときはflock()の戻り値は常にtrueになるので$wouldblock見るしかない


・・・と思ってたけど、なんか今改めてテストしたら 普通にロック中ならfalseが返ってくる。
当時のテストが間違ってたのか環境の問題か実装が変わったのか わからん。