이것은 내 유닛 파일입니다:
[Unit]
Description=Backend Service
After=mariadb.service
Requires=mariadb.service
[Service]
Type=simple
ExecStart=/var/www/html/pythonscripts/Backend.py
[Install]
Alias=BEd
WantedBy=basic.target
다음은 작동하기 전에 제가 작성한 내용입니다(서비스 설정 지침).
BEd.service must be moved to /etc/systemd/system
systemctl daemon-reload
systemctl enable BEd
systemctl start BEd
현재 /etc/systemd/system 폴더에 포함된 내용은 다음과 같습니다.
basic.target.wants dbus-org.freedesktop.NetworkManager.service default.target.wants sockets.target.wants
BEd dbus-org.freedesktop.nm-dispatcher.service getty.target.wants sysinit.target.wants
BEd.service default.target multi-user.target.wants system-update.target.wants
다시 시작한 후 나타나는 오류 메시지는 다음과 같습니다.
[root@BEKappa ~]# systemctl status -l BHd
BEd.service - Backend Service
Loaded: loaded (/etc/systemd/system/BEd.service; enabled)
Active: failed (Result: exit-code) since Sat 2016-01-16 18:39:27 EST; 34s ago
Process: 3852 ExecStart=/var/www/html/pythonscripts/BEd.py (code=exited, status=1/FAILURE)
Main PID: 3852 (code=exited, status=1/FAILURE)
CGroup: /system.slice/BEd.service
Jan 16 18:39:27 BEKappa BEd.py[3852]: Traceback (most recent call last):
Jan 16 18:39:27 BEKappa BEd.py[3852]: File "/var/www/html/pythonscripts/BEd.py", line 147, in <module>
Jan 16 18:39:27 BEKappa BEd.py[3852]: cur.execute(network_adapters_sql)
Jan 16 18:39:27 BEKappa BEd.py[3852]: File "/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py", line 174, in execute
Jan 16 18:39:27 BEKappa BEd.py[3852]: self.errorhandler(self, exc, value)
Jan 16 18:39:27 BEKappa BEd.py[3852]: File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
Jan 16 18:39:27 BEKappa BEd.py[3852]: raise errorclass, errorvalue
Jan 16 18:39:27 BEKappa BEd.py[3852]: _mysql_exceptions.ProgrammingError: (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near \'\'IP\', \'ethernet\', \'connecting\', \'(getting\', \'enp7s0\', \'yes\', \'1000\', \'"dhcp"\', )\' at line 1')
Jan 16 18:39:27 BEKappa systemd[1]: BEd.service: main process exited, code=exited, status=1/FAILURE
Jan 16 18:39:27 BEKappa systemd[1]: Unit BEd.service entered failed state.
수동 재부팅(예: systemctl start BEd) 후에 제대로 시작되기 때문에 서비스 코드가 아니라고 100% 확신합니다.
오류에 따르면 Bed가 시작될 때 mariaDB가 로드를 완료하지 않았으며 프로그램의 첫 번째 SQL 문에서 실패했다고 90% 확신합니다. 하지만 이 유닛 파일은 이전에 작동했고 현재는 다른 서버에서 작동하고 있습니다. 그래서 나는 혼란스러워요.
답변1
"내 파일에 무슨 문제가 있나요?"라는 일반적인 질문 때문에 귀하의 질문에 대한 답변이 제공되지 않을 가능성이 높습니다. 다음에는 구체적인 질문을 해보세요.
이 경우 스크립트가 준비되기 전에 MySQL에 문제가 있을 수 있다고 생각합니다. 이 경우인지 확인할 수 있습니다. MySQL을 수동으로 종료하고 스크립트를 실행합니다. 동일한 결과가 생성되어야 합니다.
계속하기 전에 스크립트에 오류 검사를 추가하여 MySQL에 연결할 수 있는지 확인할 수도 있습니다.
문제가 실제로 MySQL이 아직 시작되지 않은 것이라면 이는 흥미로운 특정 문제입니다. 구성에서 MySQL을 먼저 시작해야 한다고 표시하는 것 같기 때문입니다.
/that/ 에 대한 방법이 있어야 systemd
하지만, 어떤 작업을 시도하기 전에 1분(또는 5분) 동안 절전 모드로 스크립트를 업데이트하여 이것이 실제로 문제인지 테스트할 수도 있습니다. 이렇게 하면 MySQL이 계속하기 전에 온라인 연결을 완료할 수 있는 충분한 시간이 제공됩니다.
참고로 웹 루트 디렉터리에 Python 스크립트를 저장했다는 사실을 확인했습니다. 스크립트가 항상 웹에서 실행되도록 의도되지 않은 경우 웹 루트 외부로 이동하여 보안을 강화할 수 있습니다.