- 1. 概要
- 2. 調査
- 3. さらに調査
- 4. モジュールを削除
- 5. オチ
1. 概要
わたしが、意識したのは、「12.3 RELEASE」を「13.1 RELEASE」へアップグレードしてからです。
なんか、マシンが重いなぁと思って、「top」を見てみると「pkg」コマンドが動作しています。
last pid: 98574; load averages: 1.29, 1.33, 1.34; battery: -1% up 4+11:11:30 18:53:39
116 processes: 2 running, 114 sleeping
CPU: 23.0% user, 0.0% nice, 0.6% system, 0.0% interrupt, 76.4% idle
Mem: 1097M Active, 801M Inact, 92M Laundry, 936M Wired, 356M Buf, 875M Free
ARC:
Swap: 12G Total, 1738M Used, 10G Free, 14% Inuse
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
84818 root 1 103 0 467M 119M CPU3 3 143:08 100.00% pkg
96874 www 27 52 0 703M 446M piperd 2 0:21 1.76% httpd
こんな感じ。
いつ終わるとも知れず、「CPU」を 100% も使っておるではないか。
そもそも、これが誰が実行しているのかもわからず・・・。
「freebsd-user-jp」のお世話になって、「ps -j」と「pstree」を駆使して、なんとか
$ pstree 73709
-+= 73709 root /usr/local/bin/perl /usr/local/lib/webmin-1.995/miniserv.pl /usr/local/etc/webmin/miniserv.conf
|-+- 84791 root /usr/local/lib/webmin-1.995/webmincron/webmincron.pl (perl)
| \-+- 84815 root sh -c yes no | pkg upgrade 2>/dev/null 2>/dev/null
| |--- 84816 root yes no
| \-+- 84817 root pkg upgrade
| \--- 84818 root pkg upgrade
\--- 98561 root /usr/local/bin/perl /usr/local/lib/webmin-1.995/miniserv.pl /usr/local/etc/webmin/miniserv.conf
というところまで、つきつめた。
2. 調査
では、いったい、「Webmin」のどんな機能なの?と。
これが、実はよくわからないのですね。
まぁ
/usr/local/lib/webmin-1.995/webmincron/webmincron.pl
ちゅうのがなんかしてるのは、わかった。
しかし、そんな長いソースではないのですが
中身が
#!/usr/local/bin/perl
# Wrapper to run a single function via webmin cron
$main::no_acl_check = 1;
$main::no_referers_check = 1;
$main::webmin_script_type = 'cron';
do './webmincron-lib.pl';
$cron = $ARGV[0];
# Build list of args
my @args;
for(my $i=0; defined($cron->{'arg'.$i}); $i++) {
push(@args, $cron->{'arg'.$i});
}
# Force webmin script type to be cron
$main::webmin_script_type = 'cron';
$main::webmin_script_webmincron = $cron->{'module'}."::".$cron->{'func'};
# Require the module, call the function
eval {
local $main::error_must_die = 1;
&foreign_require($cron->{'module'}, $cron->{'file'});
&foreign_call($cron->{'module'}, $cron->{'func'}, @args);
};
$log = { %$cron };
if ($@) {
$log->{'error'} = $@;
}
# Log it, if enabled
if ($gconfig{'logsched'}) {
&webmin_log("run", "webmincron", $cron->{'id'}, $log);
}
とまぁ、予約語だらけで、要領を得ない。
ただまぁ、名前から類推するに、「cron」のような動作をして、定期体にパッケージをアップグレードしようとしているのだな・・・というところまではわかります。
しかし、これ一向に終らないし、そもそもそのマシンは、パッケージ管理を「pkg」でなく「ports」で行っておる。
「pkg upgrade」を勝手にやるなんざ、いわぬお世話なのである。
なので、この処理を止めたいのだが、止め方がわからぬ。
まぁ、「Webmin」自体を止めちゃえばいいのではありますが、「Webmin」には、ときどきお世話になりますのだ。
3. さらに調査
「webmincron.pl」と同一のディレクトリにある
/usr/local/lib/webmin-1.995/webmincron/module.info.ja.auto
の中身を読んで
desc_ja=スケジュールされたWebmin機能
longdesc_ja=Webmin Webサーバーによって定期的なスケジュールで呼び出されるWebminモジュール関数を定義する
なんとなく、あたりをつけました。
4. モジュールを削除
これは、「Webmin モジュール」というものらしい。
削除できそうなのでやってみます。
「Webmin」→「Webmin 設定」→「Webmin モジュール」
「Wbmin モジュール」の中に「スケジュールされたWebmin機能」というのがありますので、選択して
「選択されたモジュールを削除」
「削除」
これで
/usr/local/lib/webmin-1.995/webmincron
が、ディレクトリごとなくなっちゃいます。
ログアウトして、「Webmin」を再起動します。
service webmin restart
ところが、これだけでは、前に動いていたコマンドが終らなかったので
$ pgrep -lfa pkg
84815 sh -c yes no | pkg upgrade 2>/dev/null 2>/dev/null
84817 pkg upgrade
84818 pkg upgrade
$ kill -KILL 84818
$ pgrep -lfa pkg
と、いなくなったことを確認して。
しばらく様子を見ようと思います。
5. オチ
で、前項を適用して、様子を見ていたら、また現象が発生するのですよ。
困り果てましたな。
で、結局、「Webmin」をアンインストールして、いちから、インストールしなおしましたら・・・。
現象が収まりました。
結局、「初心に戻れ」ってことですな。
|