web-dev-qa-db-ja.com

systemctl enableを実行しているとき、「操作の実行に失敗しました:引数が無効です」とはどういう意味ですか?

Systemdサービスファイルを作成しました(具体的にはsvnserve用です。実際にはここからサンプルを使用しています https://stackoverflow.com/a/40584047/464087 )。有効にすると、タイピング

Sudo systemctl enable svnserve

応答があります

Failed to execute operation: Invalid argument

ランニング

Sudo systemctl status svnserve

利回り

● svnserve.service - Subversion protocol daemon
   Loaded: loaded (/etc/systemd/system/svnserve.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

何かが間違っているという手がかりを与えてくれません。その後、エラーなしでサービスを開始できますが、期待どおりに実行されているようで、systemctlステータスを開始した後、まだ何も間違っているという手がかりが得られません。

● svnserve.service - Subversion protocol daemon
   Loaded: loaded (/etc/systemd/system/svnserve.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-01-09 22:10:14 UTC; 6s ago
  Process: 9677 ExecStart=/usr/bin/svnserve $DAEMON_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 9678 (svnserve)
    Tasks: 1
   Memory: 964.0K
      CPU: 2ms
   CGroup: /system.slice/svnserve.service
           └─9678 /usr/bin/svnserve --daemon --pid-file /run/svnserve/svnserve.pid --root /srv/svn/repos --log-file /var/log/svnserve/svnserve.log

それでは、このエラーメッセージはどういう意味ですか?そして、どのレベルの事柄に「無効な引数」が適用されるはずですか? svnserveコマンドへの引数?サービスファイルの一部のプロパティ? servicectlコマンド自体へのコマンドライン引数?

FWIWこれはUbuntu 16.04 LTSサーバー上にあります。

9
EricS

同様のケースがありました。私の場合、[Install]セクションからAlias行を削除すると問題はなくなりました。別のスレッドのアントンのおかげで: https://stackoverflow.com/a/34978908/2711456 -エイリアス名はサービス名と同じではない場合があります。

14
T .

私が見つけたのは、コメント付きのバグです(少なくともsystemd 219で)。サービスファイルのコードの後に​​コメントがある場合、それを有効にできませんでした。新しい文字列にコメントを追加するか、削除してください。私はテストし、それは私のために働いています:

WantedBy=multi-user.target
# runs in init 3 (multi-user mode for linux)

これは機能しません:

WantedBy=multi-user.target  # runs in init 3 (multi-user mode for linux)

いくつかの議論はここにあります: https://github.com/rabbitmq/rabbitmq-server/issues/1422

5
Evgeny

私はまったく同じことを経験しました。 「エイリアス」を削除しても機能しますが、実際には、サービスファイルと同じ名前をエイリアスに付けることができます。

動作しない理由は、サービスファイルが置かれているディレクトリに関連しています。

Systemdが有効にするのは、ディレクトリ "/ etc/systemd/system"およびこのサービスが必要なターゲットディレクトリにエイリアスを作成することです。元のサービスファイルが既に「/ etc/systemd/system」にある場合、systemdがこのサービスを有効にしようとすると、エイリアスを作成できません。

解決策は、サービスファイルをディレクトリ「/ lib/systemd/system /」に配置することです。

2
blackpiglet

あなたがこれを試して、私はそれを解決しました:

  1. cd /etc/systemd/system/multi-user.target.wants

  2. ls

  3. ネームサービスエラーの検索「操作の実行に失敗しました:引数が無効です」

  4. rm -rf yourname.service

  5. cd/etc/systemd/system /

  6. nano yourname.service

コンテンツサービスを編集します(コンテンツの間違いかもしれません(symboy [、]、... bla..blaを確認)

==>保存する

  1. systemctl daemon-reload

  2. systemctl enable yourname.service

がんばろう!!!

2
Oanh Le Thi

/etc/systemd/system/youunit.serviceファイルの最後の行の後に、CR記号が必要です。それを確認し、/etc/systemd/system/multi-user.target.wants/youunit.serviceを削除します。次に、systemctl enable youunitを再試行します。

2
Joe Go

だから、私たちはすでに同様の答えを持っていると思います。理由を示したいだけです。

回答:

cd /etc/systemd/system/multi-user.target.wants/  # it can be other WantedBy item
ls -lA              # notice that <your>.service is not a link
rm <your>.service   # remove it

そして今試してください:

Sudo systemctl enable <your>.service

正しいリンクを作成し、サービスを有効にする必要があります。

0
Andrei