lsyncd

Lyscd – Live Syncing (Mirror) Daemon uses inotify to detect that a change has been made to the directory to be monitored, and uses rsync etc. to synchronize that changed files.

You can set it to call another tool instead of rsync.

Since synchronization is done on a file basis, it is not suitable for duplicating databases and the like.

– Regarding file updates monitored by kernel inotify, use API to monitor updates.
– Implement rsync to the mirror destination rsyncd (default is to use rsync) when file update occurs, realizing directory mirroring in real time.
– In addition to the default rsync, it is possible to use DRDB, GlusterFS, BindFS, etc. as a synchronization method.

umask

Normally, if you create a 0 byte file by specifying “touch ${filename}” etc, the permission should be created as 644(rw-r–r-). If files or directories to be created are 666(rw-rw-rw-) or 777(rwxrwxrwx), all users can write and delete them.

In this way, “umask” controls the permissions of newly created files and directories.

[vagrant@localhost ~]$ umask
0002

時と場合によるが、やはりデフォルトは644で良いように思いますな。

headerとsidemenuは1ファイルにインクルード化

フロントは予め作っておきます。

#!/usr/bin/perl --

print "Content-type:text/html\n\n";
$title = "トップ";
open(FH, "../html/header.html");
while($header = <FH>){
	if($header =~ /title/){
			print "<title>$title</title>";
		} else {
			print $header;
		}
}
close(FH);

open(FH, "../html/side.html");
while($side = <FH>){
		print $side;
}
close(FH);

ほほーう、なるほどね。こうすれば、わざわざ1行ずつprint “html tag”; なんて面倒なことしなくていいですね。
Perlの苦手意識が先行していたが、少し楽しくなってきた^^

mainも追加します。

#!/usr/bin/perl --

print "Content-type:text/html\n\n";
$title = "トップ";
open(FH, "../html/header.html");
while($header = <FH>){
	if($header =~ /title/){
			print "<title>$title</title>";
		} else {
			print $header;
		}
}
close(FH);

open(FH, "../html/side.html");
while($side = <FH>){
		print $side;
}
close(FH);

open(FH, "../html/hoge.html");
while($main = <FH>){
		print $main;
}
close(FH);

ひょえーーー

Perlでtitleを変数にして差し込みたいんだが。。。

#!/usr/bin/perl --

print "Content-type:text/html\n\n";
$title = "ほげ";
open(FH, "../html/header.html");
while($data = <FH>){
	
	print "$data";
}
close(FH);

titleを予め$titleとすると、、、

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>$title</title>
	<link rel="stylesheet" type="text/css" href="asset/css/main.css" />
</head>
<header>
	<p><a href="index.html">Hpscript</a></p>
	<ul>
	    <li>ユーザーID:hogehoge</li>
	    <li>2019-03-01 18:26:35</li>
	</ul>
	<nav>
		<p>システム</p>
	</nav>
</header>

これだと、タイトルが$titleで出力されるんだなー

print "Content-type:text/html\n\n";
$title = "ほげ";
open(FH, "../html/header.html");
while($data = <FH>){
	if($data =~ /title/){
			print "<title>$title</title>";
		} else {
			print $data;
		}
}
close(FH);

完全に違う気がするけどー、一応タイトルは変数にしてタイトル以外はインクルードもできるっちゃできるなーーーーーーー^^

perl cgiでhtmlファイルを読み込む

まずcgi

#!/usr/bin/perl --

print "Content-type:text/html\n\n";
print <<END;
    <html>
    <head>
    <title>HTMLファイル読み込み</title>
    </head>
    <body>
END

open(FH, "../html/hoge.html");
while($data = <FH>){
	print "$data";
}
close(FH);

print <<END;
    <br>
    </body>
    </html>
END

hoge.html

<h1>hello</h1>
perl included<br>hoge

view

これ実装するのに1時間半かかったー
open(FH, “../html/hoge.html”); のところで、../hoge.html とかやってたわ。。
むむむ、これもしかして、Content-type:text/htmlだけ指定すれば、以下は全部読み込める??

cgiから、cssやjsなどassetを読み込むから、「..」で一度上に上がって、指定すればできますね。

<link rel="stylesheet" type="text/css" href="../asset/css/main.css" />

あ、なるほど、ここで、ヘッダー、メニューをインクルードすればいいのか。頭良すぎww

chmod -R 755 ${dir}

Internal Server Error

[vagrant@localhost acs]$ cd /var/www/cgi-bin
[vagrant@localhost cgi-bin]$ chmod -R 755 asset

あ”

Since the cgi-bin directory is recognized as in the normal apache@unix environment it is only “CGI program”, the server attempts to execute the CSS files as a obviously program it is the cause of the error.

There are several workaround options, but it is easy to move the CSS and JS files under htdoc/ directory (where index.html by default).

htmlディレクトリ配下に移動させます。

print "	<link rel=\"stylesheet\" type=\"text/css\" href=\"../html/asset/css/styles.css\" />";

htmlはいらない模様。。修正します。

print "	<link rel=\"stylesheet\" type=\"text/css\" href=\"../asset/css/styles.css\" />";

これでOK。なるほどー

perl cgiのインデント

そもそもperlは使わない、なんてことは触れないとして、
cgiでhtmlをタグを書く際に、半角スペース4つ分のインデントを開けるのか?という疑問が湧いてくる。
他のコードを見ると、インデントは開けずに書いているように見えるが。。果たして。。

#!/usr/bin/perl --
use strict;
use utf8;

print "Content-type:text/html\n\n";
print "<!DOCTYPE html>";
print "<html>";
print "<head>";
print "	<meta charset=\"UTF-8\">";
print "	<title>ログイン|入稿管理支援システム</title>";
print "	<link rel=\"stylesheet\" type=\"text/css\" href=\"asset/css/styles.css\" />";
print "</head>";
print "<header>";
print "	<p><a href=\"index.html\">Hpscript</a></p>";
print "	<nav>";
print "		<p>入稿管理支援システム</p>";
print "	</nav>";
print "</header>";
print "<body>";
print "    <div id=\"content\">";
print "	<h1>ログイン</h1>";
print "	<form action=\"cgi-bin/hoge.cgi\" method=\"post\">";
print "		<p>";
print "		    ユーザーID:<input type=\"text\" name=\"login_id\" size=\"30\">";
print "		</p>";
print "		<p>";
print "		    パスワード:<input type=\"text\" name=\"password\" size=\"30\">";
print "		</p>";
print "		<p>";
print "		    <input type=\"submit\" value=\"ログイン\">";
print "		</p>";
print "	</form>";
print "	</div>";
print "</body>";
print "</html>";

インデントを付けたからと言って見やすくなるわけでもないから、いらないようにも思える。。

.pl and .cgi extension

1).pl extension
A common extension is “.pl” in the perl source file. In other words, it is an extension attached when writing source code of perl, such as in Notepad.

2).cgi extension
Apply .cgi extension to Perl program that runs as CGI.

On ordinary web servers, .cgi is used to distinguish CGI programs. In other words, regardless of the language used, in C, Perl or PHP, it is often the case that .cgi is used as a criterion if you run it “with CGI”. This depends on the setting of the server, so if you only set it as .pl, it means that it works with .pl, Perl or C(However, it depends on the server whether there is an operating envrionment other than Perl.)

Also, on ordinary web servers, .pl will also use Perl code when the web server interprets Perl code directly. This does not start an external process unlike CGI, but interprets it inside the web server using mod_perl etc. It is assumed that mod_perl is installed on the server.

In the former case, CGI etc. that is distributed will also work if you change. CGI to .pl and then istall it normally. if it is the latter, it may be necessary to add some hands depending on circumstances.

Perl Internal Server Error

test.cgi

#!/usr/bin/perl --
use strict;
use utf8;

print "Content-type:text/html\n\n";
print "<html>\n";
print "<head></head>\n";
print "<h1>Hello World</h1>";
print "</html>";

Internal Server Errorが表示されたら、
file permissionを644から755に変更する

RDSのbinlog

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html

MySQL エラーログ、スロークエリログ、一般ログをモニタリングできます。MySQL エラーログはデフォルトで生成されます。DB パラメータグループのパラメーターを設定することで、スロークエリと一般ログを生成できます。Amazon RDS では、すべての MySQL ログファイルはローテーションされます。次に、ログファイルのタイプごとのローテーション間隔を示します。

うむ、わかった。

MySQL バイナリログ形式を設定するには
https://console.aws.amazon.com/rds/ にある Amazon RDS コンソールを開きます。
ナビゲーションペインで、[パラメータグループ] を選択します。
変更する DB インスタンスで使用するパラメータグループを選択します。
デフォルトのパラメータグループを変更することはできません。DB インスタンスがデフォルトのパラメータグループを使用している場合、新しいパラメータグループを作成し DB インスタンスと関連付けます。
DB パラメーターグループの詳細については、「DB パラメータグループを使用する」を参照してください。
[Parameter group actions (パラメータグループのアクション)] で、[Edit (編集)] を選択します。
binlog_format パラメータを、選択したバイナリログ記録形式 (ROW、STATEMENT、または MIXED) に設定します。
[変更の保存] を選択して、更新を DB パラメータグループに保存します。
重要
default.mysql5.6、default.mysql5.7、または default.mysql8.0 DB パラメータグループを変更すると、そのパラメータグループを使用するすべての MySQL バージョン DB インスタンスに影響を与えます。AWS リージョン内の特定の MySQL 5.6、5.7 または 8.0 DB インスタンスに別のバイナリログ形式を指定する場合は、独自の DB パラメータグループを作成します。このパラメータグループで、別のログ形式を指定し、その独自の DB パラメータグループを目的の DB インスタンスに割り当てます。

Amazon RDS では、通常、バイナリログはできる限り早く消去されますが、mysqlbinlog によってアクセスされるバイナリログはインスタンスで保持される必要があります。RDS でバイナリログを保持する時間数を指定するには、mysql.rds_set_configuration ストアドプロシージャを使用して、ログのダウンロードするのに十分な期間を指定します。保持期間を設定したら、DB インスタンスのストレージ使用状況をモニタリングして、保持されたバイナリログに必要以上の容量が使用されないようにします。

binlog retention hours の最大値はMySQLの場合は168時間(7日)
https://qiita.com/kooohei/items/90a1ad7d3e83b1e941ec

MySQL 5.6
MySQL 5.7
MySQL 8.0
バイナリログの保持時間-> デフォルト値はNULL(保持しない)、5分程度で削除されてしまう
binlog retention hours の最大値はMySQLの場合は168時間(7日) 以下のコマンドで実行できる
call mysql.rds_set_configuration(‘binlog retention hours’, 24);
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/mysql_rds_set_configuration.html