systemdサービスがdbtコマンドを見つけることができません

systemdサービスがdbtコマンドを見つけることができません

私はこれに基づいてLinuxで完全なプロキシを実行するためにsystemdサービスを設定しました。記事しかし、dbtコマンドが見つかりません。 dbtコマンドをキャプチャするためにサービスを取得する方法を知っている人はいますか?

GCP仮想マシン、Ubuntu、20.04 LTS、amd64を使用しています。

サービスの状態は次のとおりです。

prefect-agent.service - Prefect Agent
     Loaded: loaded (/etc/systemd/system/prefect-agent.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-03-28 02:03:07 UTC; 1min 53s ago
   Main PID: 140053 (prefect)
      Tasks: 3 (limit: 19187)
     Memory: 139.6M
     CGroup: /system.slice/prefect-agent.service
             └─140053 /home/ulan/anaconda3/envs/zoomcamp/bin/python /home/ulan/an>

Mar 28 02:03:55 de-zoomcamp prefect[140053]:   File "/home/ulan/anaconda3/envs/zoomcamp/lib/python3.9/site-packages/prefect/engine.py", line 1438, in orchestrate_t_task_run
Mar 28 02:03:55 de-zoomcamp prefect[140053]:     result = await task.fn(*args, **kwargs)
Mar 28 02:03:55 de-zoomcamp prefect[140053]:   File "/home/ulan/anaconda3/envs/zoomcamp/lib/python3.9/site-packages/prefect_dbt/cli/commands.py", line 154, in trigger_dbt_cli_command
Mar 28 02:03:55 de-zoomcamp prefect[140053]:     result = await shell_run_command.fn(command=command, **shell_run_command_kwargs)
Mar 28 02:03:55 de-zoomcamp prefect[140053]:   File "/home/ulan/anaconda3/envs/zoomcamp/lib/python3.9/site-packages/prefect_shell/commands.py", line 114, in shell_run_command
Mar 28 02:03:55 de-zoomcamp prefect[140053]:     raise RuntimeError(msg)
Mar 28 02:03:55 de-zoomcamp prefect[140053]: RuntimeError: Command failed with exit code 127:
Mar 28 02:03:55 de-zoomcamp prefect[140053]: /tmp/prefect-655rr1g5: line 1: dbt: command not found
Mar 28 02:03:56 de-zoomcamp prefect[140053]: 02:03:56.020 | ERROR   | Flow run 'graceful-dolphin' - Finished in state Failed('Flow run encountered an exception. RuntimeError: Command failed with exit code 127:\n/tmp/prefect-655rr1g5: line 1: dbt: command not found\n\n')
Mar 28 02:03:56 de-zoomcamp prefect[140053]: 02:03:56.702 | INFO    | prefect.infrastructure.process - Process 'graceful-dolphin' exited cleanly.

私のサービスコード:

[Unit]
Description=Prefect Agent

[Service]
User=ulan
WorkingDirectory=/home/ulan/DE_zoomcamp_project/dbt/who_disease_data
ExecStart=/home/ulan/anaconda3/envs/zoomcamp/bin/prefect agent start -q "default"
Restart=always

[Install]
WantedBy=multi-user.target

dbt-bigqueryをローカルにインストールし、端末でprefect Agent start -q "default"を直接コマンドすると機能します。

答え1

プロセスがフル(または相対)パスを指定しないコマンドを実行しようとすると、環境変数内のすべてのフォルダに実行可能ファイルがあるかどうかがわかります$PATH。たとえば、変数にあるlsように/bin/ls- 代わりに実行できる方法です。/binPATH

dbt標準パスではなくインストールされているため、このフォルダがサービスの環境変数に存在しない場合、/home/ulan/anaconda3/envs/zoomcamp/binエージェントはそのフォルダがどこにあるかを知ることができません。PATHprefect

[Service]ファイルセクションで、次を追加します。

Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/ulan/anaconda3/envs/zoomcamp/bin"

その後、エージェントはコマンドdbtを見つけたときに変数のすべてのフォルダ(指定された順序で)を見つけ、最終的にリストの最後のフォルダ(実行ファイルがあるフォルダ)で見つけます。

関連情報