1

フラスコを使用してPythonで実装されたレストサーバーがあります。そして、再起動するAPIntpdを実装します。
コード test_flask.py:

from flask import Flask
import subprocess
import logging
import sys

app = Flask(__name__)


def run_shell_cmd(cmd):
    logging.info("run cmd: %s", cmd)
    try:
        rc = subprocess.call(cmd, shell=True)
        if rc != 0:
            logging.error("Fail to run %s , rc: %s" % (cmd, rc))
    except OSError as e:
        logging.error("Fail to run cmd: %s" % e)
    return rc

@app.route("/restart_ntpd")
def restart():
    run_shell_cmd("service ntpd restart")
    return "Success!"

if __name__ == "__main__":
    LOG_FORMAT = '%(asctime)s, %(levelname)s, %(filename)s:%(lineno)d, %(message)s'
    logging.basicConfig(
        format=LOG_FORMAT,
        level=logging.INFO,
        stream=sys.stdout,
    )
    app.run()

次に、次のように操作しました。

  1. フラスコサーバーを起動します: python test_flask.py
  2. curl " http://localhost:5000/restart_ntpd。次に ntpd を再起動して "success" を返す
  3. フラスコサーバーを停止します: Ctrl+c を使用して停止します
  4. フラスコ サーバーを再起動すると、例外が発生します。

    socket.error: [Errno 98] アドレスは既に使用されています。

  5. use sh $ netstat -ntlp | grep 5000、ポートはによって deforced されましたntpd

はデフォルトでポート 123ntpdを使用すると思います。私のシーンで、ポート 5000が強制解除されるのはなぜですか? フラスコの問題ですか?ntpd

4

1 に答える 1