Perl

Perl 程序中的 linux shell 命令

  • July 3, 2015

嗨朋友們,這是一些問題,我想編寫一個腳本來重新啟動處於停止狀態的伺服器。在這裡,我將來會使用我的 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

但在這裡我想輸出如果伺服器處於停止狀態,它將處於啟動狀態

如何解決?

這更像是一個查找“開始/執行”或類似的東西,更好地格式化為

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以供參考。

引用自:https://unix.stackexchange.com/questions/213714