PerlプログラムのLinuxシェルコマンド

PerlプログラムのLinuxシェルコマンド

こんにちは、質問があります。停止状態のサーバーを再起動するスクリプトを作成したいと思います。ここではMySQLサーバーを使用します。サーバーが停止すると、スクリプトによって再起動されます。私はperl言語を使用しており、私のコードは次のとおりです。

GNU nano 2.2.6ファイル:service.pl

#!/usr/local/bin/perl

if  (system("service mysql status") =~ "start/running") {
    system("service mysql start");
}

出力:

mysql stop/waiting

しかし、ここで私が望む出力は、サーバーが停止状態の場合は起動状態になるということです。

どうやって解決しますか?

答え1

これはもはや「スタート/実行」などを探してください。より良い形式は

if (system("service mysql status") =~ /start\/running/)

system次に、出力の代わりにコマンドの戻りコードを一致させます。代わりにバックティック(`)を使用してください。

if (`service mysql status` =~ /start\/running/)

notあなたのコメントで述べたように存在しません。あなたが望むものを代わりにnot使用する必要があります:!~=~

if (`service mysql status` !~ /start\/running/)

mysql次のコードが異なる状態にあると(再)起動が発生しますstart/running

if (`service mysql status` !~ /start\/running/) {
    `service mysql restart`;
}

ノート:サービスを開始/停止できるユーザーとしてPerlスクリプトを実行する必要があります。root

また、見ることができますhttp://perldoc.perl.org/perlretut.html#Simple-word-matching参考用。

関連情報