2016-08-19 2 views
0

Ich arbeite in einer Umgebung mit mehreren Benutzern, in der mehrere Benutzer gleichzeitig die Crontab bearbeiten können. Dies kann manchmal zu Problemen führen, bei denen die Änderungen einiger Benutzer nicht in der Crontab erscheinen, da ein anderer Benutzer einige Sekunden später Änderungen vorgenommen hat (zu einer älteren Kopie des Cron).KSH Einstellen des Aliasnamens mit dem Argument im Aliasnamen

Als schnellen Hack wollte ich eine Geschichte von Crontabs behalten - ein Diff auf diesen zu zeigen, würde uns sofort zeigen, wo Änderungen vorgenommen werden sollten, sollte jemand gleichzeitig an der Crontab arbeiten.

Ich habe ein sehr einfaches Skript:

#! /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 

Meine Absicht Skript jedes Mal einen Benutzertypen „crontab -e“ auf der Kommandozeile ausgeführt haben sollte.

Ich wollte einen Alias ​​für die Verwendung von "crontab -e" festlegen und das Skript ausführen. Allerdings habe ich erkannt, dass ich nicht Alias ​​mit einem Befehl mit einem Argument als Alias-Namen verwenden kann.

Gibt es einen Weg um dies? Ich will immer nur, dass mein Programm läuft, wenn "crontab -e" speziell aufgerufen wird.

HINWEIS: Alle Benutzer melden sich in der gleichen Benutzerumgebung an (d. H. Admin), so dass sie alle dieselbe crontab bearbeiten.

+0

Sie können den Alias ​​in Ihrem Skript entfernen. Ist es unalias in ksh? nicht sicher. –

+0

Jean-François Fabre - in meinem Skript gibt es keinen Alias. Was ich tun möchte, ist dieses Skript als Alias ​​mit dem Aliasnamen "crontab -e" einzustellen. Obviosuly ich konnte den Alias ​​als "Crontab" setzen, aber das ist nicht ideal – Huskie69

Antwort

1

Sie können das mit einer genau wie crontab aufgerufenen Funktion tun, die prüft, ob das erste Argument -e ist.

(irgendwo in Ihrem .kshrc Datei)

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 $* 
} 

Hinweis: die letzte Zeile ksh crontab $* nicht optimal ist, aber ich kann mich nicht erinnern oder einen Weg finden, die wirkliche Befehl aufzurufen. Bei Aliasen wird der Befehl nur mit einem Backslash versehen (\crontab), aber mit Funktionen funktioniert es nicht, daher die letzte Problemumgehung.

+0

Funktioniert ein Genuss! Vielen Dank. Ich habe es leicht modifiziert, um ein anderes zu verwenden, ansonsten läuft crontab -e immer noch, nachdem das erste Skript ausgeführt wurde. – Huskie69

+1

Ich bin erleichtert, da ich das nur mit MSYS bash getestet habe. Aber ich habe eine Menge xp in alten HP ksh-Skripten aus dem letzten Jahrhundert :) Das ist auch, wenn ich gelernt habe, dass Aliase keine Parameter nehmen können, Funktionen können. –