저는 Red Hat Linux 8
Flask 스크립트를 실행하기 위해 systemctrl 명령을 사용하고 있으며 만들고 싶습니다.
다음과 같이 수동으로 시작하면 스크립트가 제대로 실행됩니다./bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh
내 구성은 다음과 같습니다.
adminUser:/etc/systemd/system# sudo vi python_script.service
[Unit]
Description=Product
After=network.target
[Service]
Type=simple
User=flask
Group=flask
ExecStart="/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh"
Restart=always
RestartSec=10s
SyslogIdentifier=python_script
[Install]
WantedBy=multi-user.target
~
서비스를 시작할 때 다음을 얻습니다.
adminUser:/etc/systemd/system# sudo systemctl daemon-reload
adminUser:/etc/systemd/system# sudo systemctl restart python_script.service
adminUser:/etc/systemd/system# sudo systemctl status python_script.service
python_script.service - Product routing
Loaded: loaded (/etc/systemd/system/python_script.service; disabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: exit-code) since Tue 2021-08-03 15:26:42 CEST; 4s ago
Process: 444293 ExecStart=/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh (code=exited, status=203/EXEC)
Main PID: 444293 (code=exited, status=203/EXEC)
adminUser:/etc/systemd/system# sudo systemctl enable python_script.service
Created symlink /etc/systemd/system/multi-user.target.wants/python_script.service → /etc/systemd/system/python_script.service.
adminUser:/etc/systemd/system# sudo systemctl status python_script.service
python_script.service - Product routing
Loaded: loaded (/etc/systemd/system/python_script.service; enabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: exit-code) since Tue 2021-08-03 15:27:13 CEST; 5s ago
Process: 444404 ExecStart=/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh (code=exited, status=203/EXEC)
Main PID: 444404 (code=exited, status=203/EXEC)
Tasks: 0 (limit: 101113)
Memory: 0B
CGroup: /system.slice/python_script.service
디렉토리 scripts/python_script.sh
와 *.sh
파일은chmod 777
또한 경로는 /bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh
수동으로 시작할 때 유효합니다.
오류가 있는 위치나 오류를 찾는 방법에 대한 제안이 있으십니까?
답장을 보내주셔서 감사합니다!
답변1
또한 /bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh 경로는 수동으로 시작할 때 유효합니다.
그것은 길이 아닙니다. 이것은 실제로둘공백으로 구분된 경로입니다. 작동하지 않는 이유는 큰 따옴표가 시스템에 이를 경로로 해석하도록 지시하기 때문입니다.
나쁨(구문에는 따옴표가 필요하지 않습니다. 대신에부분ExecStart 값을 설정하고 두 단어가 단일 단어로 처리되도록 합니다.
ExecStart="/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh"
좋습니다(인용 필요 없음):
ExecStart=/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh
더 좋습니다(스크립트가 이미 +x인 경우 통역사가 중복된 것입니다)
ExecStart=/data_pyt/ro/python_script/folder_python/scripts/python_script.sh
더 나은 점은 다음과 같습니다(전체 쉘 스크립트는 일반적으로 중복됩니다).
WorkingDirectory=/data_pyt/ro/python_script/folder_python Environment=PYTHONPATH=/data_pyt/ro/python_script/etc/etc/etc Environment=FLASK_APP=whatever ExecStart=/usr/bin/flask run
수동으로 시작할 때 전체에 큰따옴표를 사용하면 작동하지 않습니다.
$ /bin/bash /tmp/hello.sh
Hello!
$ "/bin/bash /tmp/hello.sh"
-bash: /bin/bash /tmp/hello.sh: No such file or directory
예를 들어, 당신은 어디에 있습니까?회의systemd에서 인용해야 합니다. 특정 매개변수는 인용되지만 전체 ExecStart는 인용되지 않습니다.
Environment=EXAMPLE=whatever "THING=Value with spaces" FLASK_APP=spaces
ExecStart=/bin/bash "/home/Carol/My Projects/Paths With Spaces/script.sh" --daemon