Webmin - Webmin モジュール

クラウディア 
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 モジュール」
「Webmin」-「Webmin 設定」

 「Wbmin モジュール」の中に「スケジュールされたWebmin機能」というのがありますので、選択して
 「選択されたモジュールを削除」

「Webmin」-「Webmin モジュール」

 「削除」

「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」をアンインストールして、いちから、インストールしなおしましたら・・・。  現象が収まりました。  結局、「初心に戻れ」ってことですな。
ハイスピードプラン5G CONNECT