|
楼主 |
发表于 2011-3-13 00:20:47
|
显示全部楼层
很惭愧这么久了现在才完成这个事,使用cron其实不复杂。
使用cron每隔2分钟执行一次脚本,判断如果上机时间到,就先提醒再自动关机
儿子的用户名为joe,步骤如下:
(1) 在/etc/cron.d/目录下增加文件mycron,内容如下:- */2 * * * * root /root/mycron.sh
复制代码 表示每2分钟执行一次脚本/root/mycron.sh, 以root的身份执行
(2) 脚本/root/mycron.sh的内容如下:
- #!/bin/sh
- week=`date +%w` #0..6 星期几, 0表示星期天
- warn_t=15 #提醒时间,如果脚本每2分钟执行一次,这里设置提醒时间是30分钟
- poff_t=18 #关机时间,36分钟
- if test $week -eq 0 || test $week -eq 6; then #如果是周末,可以延长至1小时
- warn_t=30
- poff_t=33
- fi
- user=joe
- login=`users | grep $user` #判断有没有登录,不论那个用户登录,这个脚本都同样执行,所以要判断
- outfile=/root/cron.out # 周期性地输出一行数据到该文件中,根据行数可判断登录时间
- audiofile=/root/13.wav #提醒音乐
- if test "$login" != ""; then #如果joe登录了
- today=`date -u +%F` # 取今天的日期
- date -u +%F\ %T >> $outfile # 把今天的日期和时间写入文件,
- ntime=`grep $today $outfile | wc -l` #今天写入的次数
- if test $ntime -eq $warn_t; then # 如果到了提醒次数
- mplayer $audiofile # 播放音乐
- fi
- if test $ntime -ge $warn_t; then # 如果到了或者超过了提醒次数
- if test $ntime -ge $poff_t; then #如果到了关机次数
- sudo poweroff # 关机
- else
- sudo -H -u $user DISPLAY=:0.0 xclock # 在joe的桌面上显示一个时钟, 一定要加-H参数
- fi
- fi
- fi
复制代码
体会:
(1) 在/etc/cron.d/目录下加的文件属于系统crontab文件,格式中有user项,指出以谁的身份执行命令,每个用户还可以有自己的crontab文件,用crontab -e命令编辑,没有user项。 每个用户的crontab文件在开机后都被加载执行,而不是仅仅在该用户登录时才加载执行,所以必须判断当前的登录用户是谁
(2) 在joe的桌面上显示一个时钟,也就是执行有界面的程序,要设置DISPLAy=:0.0环境变量。如果以root的身份执行,使用sudo, 还要用-H参数才行,这是试出来的
(3) 如果在joe的crontab中以joe 的身份执行自动关机,因为没有权限,要用命令sudo poweroff, 并且 在/etc/sudoers中增加一行:
- joe ALL = NOPASSWD: /sbin/poweroff
复制代码
以后再加上网时间的控制。谢谢各位的回贴! |
|