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)
これを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 件のコメント:
コメントを投稿