2017-04-18 22 views
1

私はAzureバッチサービスをLinux vmを作成して使用しようとしています。 Pythonパッケージをインストールするには、インストールコマンドをスクリプトファイルに置き、起動時にそれを実行しようとしました。AzureバッチLinux VMスクリプトを実行中

pool.StartTask = new StartTask 
      { 
       // Specify a command line for the StartTask that copies the task application files to th 
       CommandLine = "bash -c \"bash /mnt/batch/tasks/startup/wd/installpackages.sh\"", 
       ResourceFiles = resourceFiles, 
       WaitForSuccess = true, 
       MaxTaskRetryCount = 5 
      }; 

このスクリプトの実行は権限の問題により失敗します。私は「sudoを」でスクリプトを実行しようとすると、次のエラーが

sudo: no tty present and no askpass program specified 

スクリプトは、ユーザ「_azbatch」でとsudoを使用して実行され、発生し、それは私が知らないパスワードの入力を求められます。

これを解決するにはどうすればよいですか?

+0

私は最初はsudoを使うことができません。また、50vm前後でスピンしたいので、各マシンにsshを実行できません。 – Selva

+0

ログを確認しました。私はスクリプトに "whoami"を入れ、出力を見ました。ユーザーは "_azbatch" – Selva

答えて

1

AzureバッチC#SDK 6.0.0以降(またはAzure Batch Python SDK 2.0.0以降)を使用している場合は、StartTaskオブジェクトに適切なUserIdentityを指定する必要があります。

pool.StartTask.UserIdentity = new UserIdentity(
    new AutoUserSpecification(
     scope: AutoUserScope.Pool, 
     elevationLevel: ElevationLevel.Admin 
    ) 
) 

あなたは、上述したものに先立ちSDKのバージョンを使用している場合は、trueStartTaskオブジェクトRunElevatedメンバーを設定する必要があります。

これらのオプションを使用すると、スクリプトがスーパーユーザー権限または管理者権限で自動的に実行されるため、スクリプトからsudoを削除する必要があります。

1つの注意:

/mnt/batch/tasks/startup/wd/installpackages.sh 

あなたがパスを直接参照することはありません。あなたは代わりに使用することができます:単に

bash -c "bash $AZ_BATCH_TASK_WORKING_DIR/installpackages.sh" 

かを:

bash ./installpackages.sh 

あなたも、あなたのシェルスクリプトの先頭に適切なシェバング文を追加し、./installpackages.shとして呼び出すことによってbash明示的な呼び出しを削除することができます。

バッチは、コマンド実行のために現在の作業ディレクトリをタスクの作業ディレクトリに設定します。タスク実行のためにBatchによって自動的に設定されたすべての環境変数を表示することができますhere

+0

パーフェクトです。ありがとう。 – Selva

-1

あなたの説明によると、私の理解に基づいてAzure Linux VMにAzure Batch Servicesによって一括して作成された同じパッケージをインストールしたいと考えています。私の経験パー

、私はそれがこの問題を回避する方法だなどpsshorgalorgParallecerlyssh、のようないくつかの並列SSHツールを介して、手動ですべてのマシン上で同時にこれらのインストールを行うことができると思います。いくつかのPythonパッケージはインストール時にコンパイラのサポートが必要なので、私はマニュアル操作が不確実性の下でより良い選択と思われるでしょう。

希望します。

関連する問題