環境:- Ubuntu 18.04
私はCプログラムを作成し、ポートと通信していくつかのデータをインポートしてファイルにダンプしようとしました。その後、bashスクリプトを作成し、このCプログラムを追加し、複数の間隔で実行されることを期待しました。
このbashスクリプトは問題なく実行できます。ルートで実行しています。
<<snip>>
#!/bin/bash
interval=$1
time=$2
./CC-test $interval $time
<<snip>>
cronを介して特定のコマンドを呼び出すときに権限委任の問題があるかどうか疑問に思います。または、cronに管理者権限で実行するように指示する必要がありますか?とにかく私はcronをrootとして実行します。他の必要があればそうは思いません。
テストでは、以下のようにシェルスクリプトで2つのコマンドを試しました。
#!/bin/bash
date >> test
fdisk -l >> test
ここでも手動で実行でき、両方の出力は問題なく印刷されます。ここでは、テストファイルに印刷された「date」コマンドの出力をcronに入れました。
これについていくつか考えてください。
答え1
クローンボトル悪魔常にrootとして実行してください。クローンボトル働く自分が属するcronjobのユーザーとして実行されます。crontab -e
as userを使用してクローンジョブを追加すると、そのジョブはrootではなくjohn
userとして実行されます。john
ルートのクローンジョブを編集するには、を使用しますsudo crontab -e
。
インタラクティブなコマンドラインからコマンドを実行することとcronジョブでコマンドを実行することの違いは、環境(環境変数、現在の作業ディレクトリなど)が異なる可能性があることです。理想的には、cronジョブは必要な変数を正しい値に明示的に設定する必要があります。たとえば、PATH
非標準パスでサードパーティユーティリティを使用している場合は、cronで実行されているスクリプトにいくつかの変数パスを追加する必要があり、スクリプトの残りの部分にcd
作業ディレクトリを設定するために正しいディレクトリに移動する必要があります。 (たとえば、あなたの例で実行すると正しいディレクトリにあります./CC-test
)。