ホーム>source

cronjobでスクリプトを実行しています。 しかし、そのスクリプトはユーザー入力を受け取っています。

どうすればこのような場合に対応できますか?

あなたの答え
  • 解決した方法 # 1

    stdinから入力を受け取る場合は、パイプまたはリダイレクトを使用してスクリプトを呼び出す別のスクリプトを作成します。

    <前>ウィズウィズ

    crontabでシェルコマンドとして起動することもできます。

    <前>ウィズウィズ

  • 解決した方法 # 2

    ユーザー入力を必要としないようにスクリプトを変更します。

    #!/bin/sh /foo/bar/my_command < my_input を介して、ファイルから必要な入力をスクリプトに送ります。 。

    「予想されるユーザー入力」が万が一パスワードである場合に備えて:しない オプション2を使用します。アクセス認証をcrontabジョブに編集することは、さまざまな種類の危険です。

    PS: 上記の警告は、 0 * * * * /bin/sh -c "/foo/bar/my_command < my_input" について考えている場合にも当てはまります。 、mvpによって提案されています。これは基本的に、ポストイットにパスワードを書き留めてモニターに貼り付けるのと同じです。簡単で、便利で、まったく安全ではありません。

  • 解決した方法 # 3

    expectを使用して、スクリプトへの手動のユーザー入力をシミュレートできます。 これは、スクリプトがリダイレクトを受け入れない場合でも機能します(パスワードを入力する必要がある場合は可能です)。

    実際には、Perl Expectは、裸の < に比べてスクリプトを書く方がはるかに簡単であることがわかりました 。

  • 解決した方法 # 4

    スクリプトで確認(yes)のみが必要な場合、crontabは次のようになります。

    <前>ウィズウィズ expect

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ pymongo - MongoDBでロックを使用する理由