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명령을 찾을 때 변수의 모든 폴더(지정된 순서대로)를 찾고 결국 목록의 마지막 폴더(실행 파일이 있는 폴더)에서 찾습니다.

관련 정보