最新記事

起動時に自動的に開始されるシステムサービスを無効にする方法は?
systemd
boot
reboot

起動時に自動的に開始されるシステムサービスを無効にする方法は?

再起動後に特定のサービスを開始しないようにsystemdに要求する方法がわかりません。サービスを無効にしようとしましたが、無効にした後は、サービスのユニットファイルが/ etc / systemd / systemにないため、起動できません。 WantedByも消してみました。私の設定ファイル: [Service] Type=simple Restart=no WorkingDirectory=/home/sentinel/arbitrage ExecStart=/home/sentinel/arbitrage/venv/bin/python -m src.settings_bot.main User=sentinel Group=sentinel Environment=PYTHONUNBUFFERED=1 Environment=DEV= StandardOutput=append:/home/sentinel/arbitrage/settings-bot-log.txt StandardError=append:/home/sentinel/arbitrage/settings-bot-log.txt [Install] WantedBy=

Admin

systemd/service ユーザーは、シェルの同じユーザーと同じ権限/権限を持っていません。
permissions
systemd
configuration
services
non-root-user

systemd/service ユーザーは、シェルの同じユーザーと同じ権限/権限を持っていません。

Hashicorp Vault Agentをシステムサービスとして設定しようとしています。ユーザー資格情報のコレクションを使用してエージェントを手動で実行できます。 おそらくこれは重要です:これはこのユーザーの/ etc / passwdです: vault:x:994:989::/home/vault:/bin/false sudo su -s /bin/bash vaultでは、金庫会議に行くにはどうすればよいですか? それを念頭に置いて、私はそれをすることができ、vault agent -config=それはうまくいきます。 これで/usr/lib/systemd/system/vault-agent.service設定しました。 [Unit] Description="HashiCorp Vault - A tool for managing secrets" Documentation=https://www.vaultproject.io/docs/ Requires=network-online.target After=network-online.target ConditionFileNotEmpty=/etc/vault.d/vault.hcl [Service] User=vault Group=vault ProtectSystem=full ProtectHome=read-only PrivateTmp=yes PrivateDevices=yes SecureBits=keep-caps AmbientCapabilities=CAP_IPC_LOCK Capabilities=CAP_IPC_LOCK+ep CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK NoNewPrivileges=yes ExecStart=/bin/vault agent -non-interactive -config=/etc/vault.d/agent-config-prod.hcl ExecReload=/bin/kill --signal HUP $MAINPID KillMode=process KillSignal=SIGINT Restart=no RestartSec=5 TimeoutStopSec=30 StartLimitIntervalSec=60 StartLimitBurst=3 LimitNOFILE=65536 [Install] WantedBy=multi-user.target これは私が何度も見つけたサービスconfです。 しかし、常に同じ問題があります。Error storing PID: could not open pid file: open ./pidfile: permission denied 私はExecStart =を/ bin / whoamiに置き換えようとしました。はい、実際にVaultであることを確認するためでした。 ./pidfileの権限と場所(デフォルトのインストール場所): /etc/vault.d/pidfile drwxr-xr-x. 108 root root 8192 May 15 16:32 etc drwxr-xr-x 3 vault vault 113 May 15 17:43 vault.d -rwxrwxrwx 1 vault vault 0 May 15 17:48 pidfile #not default permission, but I am desesperate. sudoコマンドは本当に疑わしいですsu -s /bin/bash vault。おそらくVaultユーザーにさらに権限を与えることもできます。それでは、これを私のサービスにどのように統合できますか? 毎回 systemctl reload デーモンを実行し、SELinux が無効になります。 PS:誰もがVault AGENT(rootではない)に対してsystemdを設定する方法への良いリンクがある場合は受け入れます。 編集:情報sudo -s /bin/bash vault $ sudo -s /bin/bash vault /bin/vault: cannot execute binary file $ su -s /bin/bash vault Password: (and I have no password or I don't know it) だから私は完全なsudo su -s /bin/bash vault コマンドを使用します。

Admin

systemdサービスでts-nodeを実行する
systemd
systemctl
node.js
typescript

systemdサービスでts-nodeを実行する

TypeScriptファイルを実行するサービスを作成しようとしています。 これはこれまで私のサービスファイルの内容です。 [Unit] Description=Service that runs the Parenti Bot After=network.target [Service] Type=simple User=abias ExecStart=/home/abias/.local/share/pnpm/ts-node /home/abias/projects/lemmygrad-parenti-bot/bot.ts Restart=on-failure [Install] WantedBy=multi-user.target #!/usr/bin/env ts-nodeファイルの上部にshebangを追加しましたbot.ts。私も走ることに決めたsudo chmod +x bot.ts。これをすべて行ったにもかかわらず、sudo systemctl statusサービスで実行すると、次の結果が表示されます。 × parentibot.service - Service that runs the Parenti Bot Loaded: loaded (/usr/lib/systemd/system/parentibot.service; disabled; preset: disabled) Active: failed (Result: exit-code) since Thu 2022-12-08 17:50:32 EST; 11s ago Duration: 6ms Process: 283671 ExecStart=/home/abias/.local/share/pnpm/ts-node /home/abias/projects/lemmygrad-parenti-bot/bot.ts (code=e> Main PID: 283671 (code=exited, status=203/EXEC) CPU: 3ms Dec 08 17:50:32 fedora systemd[1]: parentibot.service: Scheduled restart job, restart counter is at 5. Dec 08 17:50:32 fedora systemd[1]: Stopped parentibot.service - Service that runs the Parenti Bot. Dec 08 17:50:32 fedora systemd[1]: parentibot.service: Start request repeated too quickly. Dec 08 17:50:32 fedora systemd[1]: parentibot.service: Failed with result 'exit-code'. Dec 08 17:50:32 fedora systemd[1]: Failed to start parentibot.service - Service that runs the Parenti Bot. 私は何を間違えることができましたか? 編集する:実行出力sudo journalctl -xeu yourService.service Dec 08 17:50:32 fedora systemd[1]: Stopped parentibot.service - Service that runs the Parenti Bot. ░░ Subject: A stop job for unit parentibot.service has finished ░░ Defined-By: systemd ░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel ░░ ░░ A stop job for unit parentibot.service has finished. ░░ ░░ The job identifier is 22216 and the job result is done. Dec 08 17:50:32 fedora systemd[1]: parentibot.service: Start request repeated too quickly. Dec 08 17:50:32 fedora systemd[1]: parentibot.service: Failed with result 'exit-code'. ░░ Subject: Unit failed ░░ Defined-By: systemd ░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel ░░ ░░ The unit parentibot.service has entered the 'failed' state with result 'exit-code'. Dec 08 17:50:32 fedora systemd[1]: Failed to start parentibot.service - Service that runs the Parenti Bot. ░░ Subject: A start job for unit parentibot.service has failed ░░ Defined-By: systemd ░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel ░░ ░░ A start job for unit parentibot.service has finished with a failure. ░░ ░░ The job identifier is 22216 and the job result is failed. 編集2:内容bot.ts:見ることができますここ。 編集3:先ほど実行したところ、journalctl次のエラーが表示されましたparentibot.service: Failed to locate executable /home/abias/.local/share/pnpm/ts-node。これが問題のように見えますが、次の質問が提起されます。実行可能ファイルが見つからないのはなぜですか(実行可能ファイルがあるかどうかを確認しました)。

Admin

FQDNの名前解決が失敗した場合は、NFS / CIFSを強制的に再試行します。
systemd
mount
dns
nfs
fstab

FQDNの名前解決が失敗した場合は、NFS / CIFSを強制的に再試行します。

最初はUbuntuフォーラムにこの記事を投稿しようとしましたが、ここでより多くの視聴者に近づきたいと思います。 fstabにNFS / CIFSをマウントしてから、サービスが使用する設定があります(私の場合、サービスはDockerコンテナとして提供されます)。 一般的にすべてが大丈夫です。私のsystemdサービスが起動したら、マウントポイント(私のデバイスがとして定義されているRequiresMountsFor=)が正しくロードされていることを確認してください。私のマウントポイントは、/etc/fstab私のネットワークで内部的に解決されるFQDN名を使用して定義されます。 nas.home.ca:/mnt/HomeNAS /mnt/nas nfs ro 0 0 nas.home.ca:/mnt/HomeNAS/VM/Config/Alma-Docker1 /mnt/docker nfs rw 0 0 //nas.home.ca/Restore /mnt/restore cifs credentials=/etc/fstab.credentials.backup,file_mode=0777,dir_mode=02777 0 0 サービスの開始時に内部ネームサーバーがオフラインの場合、問題が発生します。マウントがまだ存在しない場合、FQDN 未確認エラーが原因でマウントが迅速に失敗し、systemd はマウントを再マウントしようとしません。したがって、私のサービスも開始されず、依存関係の失敗のために再起動を試みません。 fstabで利用可能なオプションを見てみましたが、x.systemd失敗したときに再起動/再試行するようにマウントデバイスを設定するエントリが見つかりませんでした。 [eric@dockervm2 system]$ sudo systemctl start mnt-nas.mount Job failed. See "journalctl -xe" for details. [eric@dockervm2 system]$ sudo systemctl start mnt-restore.mount Job failed. See "journalctl -xe" for details. [eric@dockervm2 system]$ sudo systemctl start mnt-docker.mount Job failed. See "journalctl -xe" for details. [eric@dockervm2 system]$ sudo journalctl -xe したがって、サービスを開始しようとすると、次のエラーメッセージが表示されます。 [eric@dockervm2 system]$ sudo systemctl start backup-docker-compose A dependency job for backup-docker-compose.service failed. See 'journalctl -xe' for details. 再試行できるようにマウントポイントをどのように設定しますか?問題は、私のネームサーバーがオフラインで、私のネームサーバーがバックアップされ実行されるまでXXX秒ごとに再起動しようとしていることです。 fqdn(または/ etc / hostsファイルのローカルエントリ)の代わりにfstabのIPを使用してこの問題を解決できることを知っていますが、そのような目的は無視されます。 再試行を続行するためにsystemdでローカルに設定する方法はありますか?

Admin

LinuxのどのプロセスがSystemdをINITとして使用してX Serverを起動しますか?
systemd
x11
x-server

LinuxのどのプロセスがSystemdをINITとして使用してX Serverを起動しますか?

デバイスでLinuxシステムを実行していますが、Xserverが起動する前にディスプレイデバイスを手動で設定する必要があります。それ以外の場合、フレームバッファデバイスは動作しません。 この「手動操作」を実行する方法は2つあります。 これはxinitの前に実行されますが、インターネット検索とstartxスクリプトを読んだ後にxinitが実行される前にスクリプトフックが実行されないことがわかりました。 Xserverが起動する前に、この「手動操作」を実行するためにシステムデバイスを実装しました。検索しましたが、どのサービスやプロセスが実際に「startx」を実行するのか、Xserverを起動しているのかを知ることができませんでした。 だから誰かが私にヒントを与えることを願ってここにこの質問を投稿します。

Admin

gitコマンドでsystemdサービスが失敗する
systemd

gitコマンドでsystemdサービスが失敗する

私は移行cronからsystemd非常に簡単なことを達成しようとしています。sync_org_gitデフォルトでは、特定のフォルダにCDを挿入していくつかのgit操作を実行する小さなbashスクリプトがあります。 gitコマンドは何かstdout(追跡されていないファイル、コミット後のフィードバックなど)を作成します。これはgitでは珍しいことではありませんが、systemctl --user start sync-org-git.timer操作が失敗したことを意味します。スクリプトまたはシステムファイルを変更する必要がありますか? サービスとタイマーファイルは次のとおりです。 ❯ cat sync-org-git.service [Unit] Description=sync org to git [Service] ExecStart=/home/fbence/bin/sync_org_git ❯ cat sync-org-git.timer [Unit] Description=Sync org git timer Requires=sync-org-git.service [Timer] OnBootSec=0min OnCalendar=*:*:0/5 Unit=sync_org_git.service [Install] WantedBy=multi-user.target 修正する 使用ExecStart=-/home/fbence/bin/sync_org_git 明らかにする sync-org-git.timer: Refusing to start, unit sync_org_git.service to trigger not loaded. しかし、実際にはログからシェルスクリプトの出力を見ることができます。

Admin

新しいシステムサービスでターゲットを設定する方法
systemd

新しいシステムサービスでターゲットを設定する方法

systemdで使用する新しいサービスファイルを設定する必要があります。after以下の例に示すように、同じ行に複数のターゲットを配置できるかどうか、または各ランレベルのサービスを作成する必要があるかどうかを知りたいです。 例: [Unit] Description=New service After= runlevel2.target runlevel3.target runlevel4.target runlevel5.target 区切り文字が必要かどうかわかりません。 以前のサービスには次のようなchkconfigがありました。 chkconfig: 2345 91 11

Admin

ディレクトリ(cd)を変更できないか、作業ディレクトリSystemd Execコマンドを使用できません。
systemd
environment-variables
docker
startup

ディレクトリ(cd)を変更できないか、作業ディレクトリSystemd Execコマンドを使用できません。

起動スクリプトを取得しようとしています(システムサービス)のためのdocker-compose containers。 私はそれが動作するように努力しており、変更後に変更しようとしています。いくつかは動作し、他のものは期待どおりに動作しません。環境変数システム構成を使用します。 # named `dc-mag235.service` [Unit] Description=Magento 2.3.5 Docker-Compose Containers After=docker.service Requires=docker.service [Service] EnvironmentFile=/var/www/docker/_systemd.startups_/mag2.35.env.file #PassEnvironment=$DCFOLDER Type=simple TimeoutStartSec=0 Restart=always WorkingDirectory=${DCFOLDER} ExecStartPre=mkdir -p ${LOGFOLDER} ExecStartPre=echo ${DCFOLDER} ExecStartPre=echo Starting Docker-compose service for ${DESCRIPTION}... ExecStart=/usr/local/bin/docker-compose start ExecReload=/usr/local/bin/docker-compose restart ExecStop=/usr/local/bin/docker-compose stop [Install] WantedBy=multi-user.target DESCRIPTION=Magento 2.3.5 Docker-Compose Containers LOGFOLDER=/var/www/docker/_initlogs_ LOGFILE=$LOGFOLDER/dc-mag235.startup.log DCFOLDER=/var/www/docker/magento2-docker-full-supervisord-expanded/release-magento2.35 WorkingDirectory変数と一緒に試してみてください$DCFOLDER。 削除すると、PassEnvironmentここで説明したのと同じエラーが発生します。: sudo service dc-mag235 status /etc/systemd/system/dc-glo-mag235.service:8: Invalid environment name for PassEnvironment, ignoring: $DCFOLDER Apr 22 12:32:20 glo020-truservcomm-jhb1-001 systemd[1]: /etc/systemd/system/dc-glo-mag235.service:12: WorkingDirectory= path is not absolute: ${DCFOLDER} 代わりにcd $DCFOLDER && docker-compose restartasコマンドを試してください。ExecStartWorkingDirectory Executable "cd" not found in path "/usr/local/sbin:/usr/local/bin:/usr/sbin: 注: 無効WorkingDirectoryにしてから、cdechoをチェックすると、/var/log/syslogechoはExecStartPre実際にこれらの変数(パス)の値を元に戻します。あまりにもよくExecStartPre実行されました。 質問 docker-compose.yml.*実行中のカスタムファイルがあります。既存のコンテナを再起動/停止/起動する必要があります。docker-compose私が使用したいサービス命令を尋ねます。docker-compose.ymlそのディレクトリにcd、orWorkingDirectoryを直接使用できるようにする必要がありますdocker-compose start。 さまざまなdocker-composeコンテナセット(異なるフォルダ)の実行中のインスタンスが複数あるので、場所を指定できる「テンプレートシステム」ファイルを作成したいと思いますEnvironmentFile。 言い換えれば: Example = each of these have their own Docker containers... so I want to create different systemd services for these: /docker/folder/docker-compose.yml /docker/folder2/docker-compose.yml 質問 ここにいくつかの質問があります。 WorkingDirectory「環境変数」と一緒に使用できますか?そしてどのように使用できますか?ご覧のとおり、私はPassEnvironmentを使ってみました。しかし、環境ファイルがあります。私はよく理解していないようです実装するsystemd環境を設定する時間ですWorkingDirectory。これらのすべての「サービス」コマンドには静的定数値が必要なようです。 'cd' not found in path- これは変です。ただ簡単にできると思ったんです。ディレクトリの変更docker-compose.ymlを実行できるように、ファイルがある作業ディレクトリに移動しますdocker-compose start/restart/stop。 実際の用途は何ですかPassEnvironment? $(which docker-compose) ps最後に、例えば、試みはWorkingDirectory「一定値」を期待していたようだったので失敗しました。$(which docker-compose)代わりに静的位置を使用したかったのです。

Admin

コマンドラインを複製または変更せずにsystemd ExecStartをshimにラップできますか?
systemd

コマンドラインを複製または変更せずにsystemd ExecStartをshimにラップできますか?

既存のシステムサービスがあるとしましょう。 # /usr/lib/systemd/system/whatever.service [Service] ExecStart=/usr/bin/java -Dfoo=bar -Dbaz=qux -Xmeh=whatever -jar /path/to/whatever.jar arg1 arg2 ... ...プラグインを使用して実行中のラッパーに入れたいです。まったく同じコマンドが、最初にロックを獲得した場合にのみ該当します。私がよく知っている方法は、既存のアイテムを消去してExecStart次のことを繰り返すことです。 # /etc/systemd/system/whatever.service.d/needs-lock.conf [Service] ExecStart= ExecStart=/usr/bin/with-lock lock-id /usr/bin/java -Dfoo=bar -Dbaz=qux -Xmeh=whatever -jar /path/to/whatever.jar arg1 arg2 ... 残念なことです。/usr/bin/with-lock lock-id本当に既存のサービスに追加したいです。、needs-lock.confアップストリーム定義が変更されるたびにwhatever.service私を変更する必要はありません。 これを達成するための合理的な方法はありますか?

Admin

システムサービスには保証された作業順序はありますか?
systemd

システムサービスには保証された作業順序はありますか?

プロジェクト内でプロジェクトを実行するための優先順位や作業順序はありますか?systemd サービスユニットの構成文書? 例えば、ExecStartPreそのタスクは以前に発生したようです。ExecStart。そしていくつかのExecStartPre仕事はそれぞれは、完了するまで順番に実行され続けます。。返品、ExecConditionジョブは以前に発生するように定義されていますExecStartPre(非常に具体的な順序/実行があります)。 しかもRuntimeDirectory以前にジョブ/作成が発生しましたExecStart。 ところが、RuntimeDirectory作業/生成は必ずExecStartPre完了後に発生するのでしょうか? (私の実験によると、これは本当ですが、競合状態のためにだまされたり、実装による動作を経験したりする可能性があります。RuntimeDirectory)ExecCondition 同様に、ExecStopPostRuntimeDirectory削除前または削除後に必ずジョブが発生しますか? 特定のサービス内に微妙だが暗黙的に保証される他の注文はありますか?それとも、逆に並列に発生する可能性がある(または順序が定義されていない)他のタスクはありますか?

Admin

systemdが「欲しい」ターゲットをロードできない理由を確認する方法は?
systemd
systemd-journald

systemdが「欲しい」ターゲットをロードできない理由を確認する方法は?

systemdデフォルトのターゲットを持つUbuntu 20.04システムがありますgraphical.target。 $ systemctl get-default graphical.target 「必要」と「欲しい」の連鎖に従うと、最終的に単位graphical.targetファイルを「円」になりますwidget.target。 widget.target起動時にロードされる場合もあり、そうでない場合もあることがわかりました。これは、ロードに失敗したインスタンスを$ systemctl list-units --type target含まない出力として確認されます。widget.target 現在のデバイスは、widget.target最後に起動したときにロードに失敗した状態です。を使用している場合は、$ journalctl -u widget.target -b最後journalctlに起動した後に戻ってデバイスのログを確認してください-- No entries --。最後の起動以降に検索を拡張した場合、唯一のエントリはエラーではなく、widget.targetまったく関連していない一般的なエントリだけです。 systemd「希望する」ターゲットがロードされない理由を説明する他の方法はありますか? 追加情報 widget.targetその宛先のユニットファイル( にファイルとして表示される/etc/systemd/system/widget.target.wants/)の「WantedBy」を介して別のユニット、別の宛先が欲しい。他のターゲットはロードされているかどうかに関係なくロードされますwidget.target。 さらに、widget.targetそれ自体が4つのサービスが望むものでもある。widget.target出力によると、これらのサービスの1つはロードされているかどうかに関係なくロードされますが、3つはロードされません$ systemctl list-units --type service。 つまり、widget.target4つのサービスが希望するターゲットを望んでいます。widget.target5つのデバイスのいずれかをロードしてもロードするかどうかに違いはありません。

Admin