2016-10-12 19 views
0

'サービス開始'を使用しているときにシステムドロップオプションが表示されるのはなぜですか? 'サービス' のシステム停止サービス開始オプション

マニュアルページには、サービスのコマンドを定義:

サービススクリプトコマンド[オプション]

及びコマンドを渡す

サービスを米国および変更されていないinitスクリプトのオプション。 service foo someaction barは「バー」などを書き込みながら、デーモンリロード後、service foo start barは、出力ファイルには何も書き込まれていない、にsystemdを使用したシステムでは

#!/bin/sh 

case "$1" in 
     start) 
       echo $2 >> output 
     ;; 
     someaction)   
       echo $2 >> output 
     ;; 
esac 

exit 0 

は今「foo」という名前のいくつかのサービスのために、このinitスクリプトを取ります期待される。 (Ubuntu 16.04でテスト済み)

systemdのないシステムでは、両方のコマンドが "bar"を期待通りに書き出します。 (Mint 17.1でテスト済み)

私は同じことをやります。

startが呼び出されたときにオプションがドロップされ、他の「カスタム」コマンドが呼び出されないのはなぜですか?

答えて

1

serviceコマンドは、systemdではなくSysV initスクリプト用に設計されています。 systemdベースのシステムでは、serviceコマンドは、シムから変換された古い構文を新しい構文に引き続き存在する可能性があります。 Ubuntu 16.04では、/usr/sbin/serviceはbashスクリプトなので、ソースコードを読んで、どこにis_systemd条件節があるかを見ることができます。 systemdにベースのシステムでstartコマンドを見たとき、あなたはこのが表示されます。

systemctl $sctl_args ${ACTION} $unit 

つまり、追加の引数は、この翻訳の層に通過されていません。

systemdserviceの代わりにsystemctlがあり、サービスの開始にはsystemctl start your-service-nameが使用されています。それを説明する

systemctl start myservice-someaction 
+0

まあの:

systemdは、あなたがして行うことができるように、カスタムアクションを追加することができますが、簡単にカスタムunitsを作成することができますサポートしていません。しかし、serviceコマンドはsystemd-systemsの独自の仕様に従っていません。しかし、systemctlでargsを渡す方法はありますか? – Bastien

+1

あなたが正しいです - 'man service'文書には 'systemd'については何も言及されておらず、Ubuntu 16.04でも使われていない' upstart'だけです。いいえ、あなたは 'systemctl start'でargsを渡すことはできません。新しいユニットを作成し、それを起動するときに基本コマンドに異なるオプションを渡します。設計は、状況が異なる状況でどのように実行されるかの一貫性を高めることを奨励することです。 –

+1

Ubuntu 16.04の 'service'の不正確な' man'ページに関するバグ報告を開くことを検討することができます。 –

関連する問題