これは私のユニットファイルです:
[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が続行する前にオンライン接続を完了するのに十分な時間が提供されます。
ちなみに、WebルートディレクトリにPythonスクリプトを保存したことを確認しました。スクリプトが常にWeb上で実行されることを意図していない場合は、Webルートの外に移動してセキュリティを強化できます。