나는 이것을 기반으로 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
- 대신 실행할 수 있는 방법입니다 ./bin
PATH
dbt
표준 경로가 아닌 에 설치되므로 이 폴더가 서비스의 환경 변수에 /home/ulan/anaconda3/envs/zoomcamp/bin
없으면 에이전트는 해당 폴더를 어디서 찾을 수 있는지 알 수 없습니다.PATH
prefect
[Service]
파일 섹션에서 다음을 추가합니다.
Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/ulan/anaconda3/envs/zoomcamp/bin"
그런 다음 에이전트가 dbt
명령을 찾을 때 변수의 모든 폴더(지정된 순서대로)를 찾고 결국 목록의 마지막 폴더(실행 파일이 있는 폴더)에서 찾습니다.