2016-08-19 11 views
0

私は、複数のユーザが同時にcrontabを編集できる(しばしば行う)マルチユーザ環境で働いています。これは、あるユーザーの変更が他のユーザーが数秒後に変更したときにcrontabに表示されない問題につながります(古いcronのコピーに)。KSHエイリアス名の引数でエイリアス名を設定する

クイックハックとして、私はcrontabの歴史を残したかったのです。これらのファイルにdiffを実行すると、同時にcrontabで作業している人がいれば、どこに変更が加えられたのかがわかります。私は非常に基本的なスクリプト作成

#! /bin/ksh 

export datetime=`date +%Y%m%d_%H%M` 
echo "Your username?: \c" 
read username 
crontab -l > /u01/app/oracle/dba/scripts/audit/cron_hist/"crontab_"$username"_"$datetime 

export cronfile=/u01/app/oracle/dba/scripts/audit/cron_hist/"crontab_"$username"_"$datetime 
### echo $cronfile 
vi $cronfile 

crontab < $cronfile 

を私の意図は、毎回スクリプトの実行にコマンドラインでユーザータイプ「のcrontab -e」を持っていることでした。

"crontab -e"を使用するようにエイリアスを設定してスクリプトを実行したかったのです。しかし、私はエイリアスとしてエイリアスを使用することができないことに気付きました。

方法はありますか?私は、 "crontab -e"が特に呼び出された場合、自分のプログラムを実行したいだけです。

注:すべてのユーザーが同じユーザー環境(つまり管理者)にログインしているため、すべて同じユーザーが同じcrontabを編集しています。

+0

スクリプトでエイリアスを削除できます。それはkshでunaliasですか?わからない。 –

+0

Jean-FrançoisFabre - スクリプトにエイリアスはありません。私がしたいのは、エイリアス名 "crontab -e"を使って別名としてスクリプトを設定することです。 Obviosuly私は "crontab"としてエイリアスを設定することができますが、それは理想的ではありません – Huskie69

答えて

1

最初の引数が-eであるかどうかを確認するコマンドは、crontabのように正確に呼び出されます。

(あなた.kshrcファイル内のどこか)

function crontab 
{ 
    if [ "$1" = "-e" ] ; then 
    # call my script 
    echo callscript first 
    fi 
    # call crontab in a subprocess 
    ksh crontab $* 
    # or maybe call with full path /sbin/crontab $* 
} 

注:最後の行ksh crontab $*は最適ではありませんが、私は覚えているか、実際のコマンドを呼び出す方法を見つけることができません。エイリアスを使用すると、コマンド(\crontab)をバックスラッシュにすることができますが、機能によっては最終的な回避策が機能しません。

+0

治療をしてください!ありがとう。 elseを使うために少し修正しました。そうでなければ、初期スクリプトの実行後にcrontab -eを実行します。 – Huskie69

+1

私はMSYS bashでテストしたので、安心しました。しかし、私は前世紀の古いHP kshスクリプトの中にたくさんのxpを持っています:)それは、エイリアスがパラメータを取ることができないことを学んだとき、関数ができます。 –

関連する問題