☆☆ 新着記事 ☆☆

2020年5月22日金曜日

CRON設定の際に気を付けること  ファイルディレクトリと複数コマンド


1. Fileの参照ディレクトリ
2. 複数コマンドを1文で記述する



1. Fileの参照ディレクトリ

結論から言うと、CRONで実行するアプリの中にファイル参照があれば、それは全て絶対パスで記述する、という事。
相対パスは /root フォルダになっています。

例えば、CSVファイルをJSONに変換する簡単なPython アプリがあったとします。

記述は
**JSON_CONV.py
import csv
import json
new_data=[]
with open("sample.csv",'r') as f: #,encoding='utf-8_sig'
     reader = csv.DictReader(f)
     for line in reader:
         new_data.append(line)
with open('sample.json', 'w') as f:
    json.dump(new_data, f)

この記述は、コマンドラインからアプリを実行する場合、sample.csvとアプリファイルが同一フォルダ内にあれば、動きます。

これをCRON経由で実行すると、参照は rootユーザでログインしていれば、./rootフォルダ 。各ユーザ権限でログインしていれば、./home配下の各ユーザディレクトリになります。

絶対パスで記述しましょう。

2. 複数コマンドを1文で記述する

コマンド1 || コマンド2
コマンド1が異常終了ならコマンド2を実行
$> ls hello.txt || echo "Hello!" > hello.txt
hello.txtが存在しなければ、文字列"Hello!"をhello.txtに出力して生成.

コマンド1 && コマンド2
$> ls hello.txt && rm -f hello.txt
hello.txtが存在したら、hello.txtを削除.

"[ 条件式 ]"の利用
$> [ -f hello.txt ] || echo "Hello!" > hello.txt
$> [ -f hello.txt ] && rm -f hello.txt
[ -f hello.txt ] は "hello.txtがファイルである"->真. ファイルでない/存在しない->偽.
シェルスクリプト 基本サイトで検索

コマンド1; コマンド2
$> ls hello.txt; cp hello.txt yeah.txt
hello.txtの有無を確認し、その結果に関わらずhello.txtのコピーをyeah.txtとして生成する。hello.txtがない場合、それにも関わらずコピーしようとするので後者cpコマンドはエラー.

コマンド1 | コマンド2
コマンド1の出力をコマンド2の入力として実行
$> ps aux | grep ntpd
プロセス一覧リストを出力して、そのうち"ntpd"が含まれる行を出力.

0 件のコメント:

コメントを投稿