Systemctrl 서비스가 203으로 종료되었습니다. 스크립트가 "수동"으로 시작되어도 작동합니다.

Systemctrl 서비스가 203으로 종료되었습니다. 스크립트가 "수동"으로 시작되어도 작동합니다.

저는 Red Hat Linux 8Flask 스크립트를 실행하기 위해 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

관련 정보