我在多用户环境中工作,多个用户可以(并经常)同时编辑crontab。这有时会导致一些用户的更改没有出现在crontab中的问题,因为另一个用户在几秒钟之后做了更改(对于旧版本的cron)。
作为一个快速的黑客,我想保留crontabs的历史 - 在这些上运行差异将立即向我们显示如果有人同时在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”,我只希望我的程序运行。
注意:所有用户都登录到同一个用户环境(即admin),因此他们都编辑了相同的crontab。
答案 0 :(得分:1)
你可以使用一个名为crontab
命令的函数来检查第一个参数是-e
。
(.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
),但使用它不起作用的函数,因此最终解决方法。