NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
JA

Linux コマンドとシェル スキル

サーバー スクリプトのための Python: Bash の終わり

Python は、JSON ペイロード、REST 呼び出し、バックオフによる再試行、正規表現に含めるべきではない解析など、bash スクリプトに手がかかるとすぐに現れます。これは bash の代替品ではありません。これは次の段であり、賢い正規表現が実際のデータ構造とエラー処理が必要であることを認めなければならない場所です。 Server Python は独自のコンピテンシーです。ディストリビューションはインタープリターのバージョンを固定し、pip はシステムのインストールを拒否するようになり (PEP 668)、インポートするパッケージは自動化の攻撃対象領域になります。

要点

  • 適切な条件で OS と話し合ってください。subprocess.run([...], check=True, Capture_output=True) は安全なシェルです。 shell=True と os.system は、ファイル名またはユーザー データが文字列に紛れ込むときに食い込むインジェクション パスです。
  • シリアル化は、ops の Python のエッジです。構成と API には json.load、インフラ形式には yaml.safe_load (プレーン ロードではありません)、スプレッドシートには csv モジュールが使用されます。正規表現を使用した構造化フォーマットの解析は、一度は償ったバグです。
  • 依存関係はレーン内にとどまります: ツールごとの python3 -m venv (または pip install --user)、requirements.txt の固定、最新のディストリビューションでの pip の「外部管理環境」の拒否は、障害物ではなくガードレールとして扱われます。
  • SSH 側のツールは、使用できるほど成熟しています。paramiko またはファブリックは、bash の ssh ループが決してきれいに構成されない方法でリモート チェックと並列インベントリ ジョブを実行します。 ssh がすでに信頼しているのと同じキーを再利用します。
  • ロギングは印刷に比べて高速です。ローテーションを備えたロギング モジュールにより、cron 非表示のスクリプトが表示される場所が提供され、一貫したログ行形式 (「実行された内容、変更された内容、失敗した内容」) がオンコールで実際に読み取られます。
  • 冪等性は虚勢ではなくデータから生まれます。望ましい状態を辞書としてモデル化し、現在と望ましい状態の差分をとり、デルタのみに作用します。このパターンにより、スクリプトを 2 回安全に実行できるようになります。
  • スクリプトは他のコードと同様に CI を取得します。関数と失敗パスを解析する単体テスト、ラフでリントし、400 行の main() をタイプミスを待つインシデントとして扱います。フォールバックはポケットベルの役割であり、リファクタリングではありません。
  • サーバー上のバージョンの現実: ディストリビューションにインストールされた python3 は古くて安定しており、システム ツールはそれにリンクしており、apt または yum がそれを所有しています。独自のランタイムを venv に保持し、ディストリビューション インタープリターはそのままにしておきます。

現場ノート

1 つのカジュアルなルートレベルの pip インストールにより、共有の urllib 依存関係がアップグレードされ、次のパッチウィンドウまでディストリビューション自体の適切な接着剤が静かに破壊されました。ベンヴとピン留めされた要件はその場で発生し、その習慣が定着しました。

よくある質問

Python は bash の代替となるのでしょうか?

さまざまな仕事: bash はバイナリとパイプラインを簡単に調整し、Python はデータ構造、API、および障害処理を所有します。成熟したサーバー資産は両方を実行しており、それらの間の境界線が実際の設計が行われる場所です。

サーバー上で Python が他のすべてに勝る点はどこでしょうか?

REST API を通じて応答可能なすべてのもの: クラウド インベントリ、DNS レコードのメンテナンス、SSL 有効期限監視、実際のパーサーによるログの再形成。 bash では厄介な体操をしないとタスクを表現できません。

root としてグローバルに pip install することはできますか?

最新のディストリビューションでは、いいえ、PEP 668 はシステム Python を外部管理としてマークしており、--break-system-packages はまさにそのとおりです。 venv または --user を使用し、実稼働コードなどの要件を固定します。

Python スクリプトを適切なサービスとして実行するにはどうすればよいですか?

systemd ユニット: 非 root ユーザーのスクリプトを指す ExecStart (Restart=on-failure) は、自動的にジャーナルにログを記録します。 systemctl status とjournalctl -u name がデバッグ インターフェイスになります。

linux コマンドとシェル スキル に対するKinetikatechの支援

linux コマンドとシェル スキル の専門家になる必要はありません:管理者がサーバーを操作するかサーバーと戦うかを決定するコマンドとスクリプトの習慣。すべての基本インストールに存在するツールを使用して、テキストとプロセスを検索、変換、転送、監視します。 それがまさにLinuxサーバーセキュリティとサーバー管理が存在する理由です。セットアップ、強化、監視、そして昼夜を問わず駆けつける人間のサポート。

エンジニアに相談する

サーバーの障害?サイトの改ざん?表示が遅い?

重大な障害には30分以内に対応 — 24時間365日体制です。

緊急サポートを依頼する support@kinetikatech.com