LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2079|回复: 4

问我的crond的几个问题?

[复制链接]
发表于 2007-9-3 10:08:01 | 显示全部楼层 |阅读模式
我用的是Archlinux系统.
1. 为了保护眼睛, 我设置了每45分钟启动一次屏幕保护程序. 但是每次我重新进入Archlinux时, 我的crond指定的程序并不会自动运行, 虽然在/var/log/crond可以看到运行记录已经写入日志了. 可以在/var/run/crond.pid看到crond已经作为daemon运行了, 同样可以用ps查看到它已经运行了. 我在当前用户下, 用crontab -l也可以看到当前的crond任务已经启用了.
如果我在启动后, 将/etc/rc.d/crond restart一下就可以正常的运行了.

我在/etc/rc.conf设置daemon的启动如下:

  1. DAEMONS=(syslog-ng @network !netfs !hotplug !pcmcia crond alsa)
复制代码

我的lockscreen.sh脚本:

  1. #!/bin/bash
  2. ########################################
  3. ## Lock screen after 45 minis
  4. ########################################
  5. SHELL=/bin/bash
  6. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  7. HOME=$HOME
  8. display=$DISPLAY
  9. user=$USER
  10. date=`date`

  11. xlock_status=`ps aux | grep "$user" | grep 'xlock' | grep -v 'grep'`
  12. vlock_status=`ps aux | grep "$user" | grep 'vlock' | grep -v 'grep'`

  13.      ## 将启动记录记录到我的日志文件中
  14. echo >> /home/.mylogs/crond.logs
  15. echo "$user:$date: Start lockscreen." >> /home/.mylogs/crond.logs

  16.     ## 如果启动了xWindow, 就运行xlock锁住桌面.
  17. if [ -n "$display" ] ; then
  18.          ## 如果xlock没有运行, 就运行它.
  19.     if [ -n "xlock_status" ] ; then
  20.         exec /usr/bin/xlock
  21.     fi
  22. else
  23.     ## 如果在是终端, 就清空当前的terminal数据后, 再用vlock锁住终端.
  24.     clear
  25.     exec /usr/bin/vlock
  26. fi
复制代码


我的/var/spool/cron/lewbing文件

  1. SHELL=/bin/bash
  2. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  3. HOME=/home/lewbing

  4. */45 * * * * "/usr/local/bin/myapps/lockscreen.sh"
复制代码


2. 为什么我设置的crond任务会每逢我设置的45分钟和整点都运行呢? 我设置的是每45分钟运行一次, 如现在时间是9:30:00, 那么我的crond任务会在9:45:00时运行一次, 又会参10:00:00再运行一次.
我的crond设置参数同上.
发表于 2007-9-3 10:19:22 | 显示全部楼层
/etc/rc.d/crond(Linux为crond sunos为cron) start file://启动进程
# crontab -l root
查看作业是否加入执行队列。
不行退出到登陆界面,再次登陆进入,还加载就reboot

你是不是直接编辑用户的cron文件呀?
如果是当然不运行,cron demon是在启动的时候才读一次配置文件.
如果你是后加的JOB 要用crontab -e来编辑用户的cron.
要不你 kill -HUP cron的进程ID.
重新启动这个进程.
每5分钟做一次必须写成5,15,20,25,30,35,40,45,50,55 * * * *
===================================
"格式如下:
  (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   /usr/bin/updatedb
      1. 分钟 (0-60)
      2. 小时 (0-23)
      3. 日 (1-31)
      4. 月 (1-12)
      5. 星期 (1-7)
      6. 所要运行的程序
但是我设成 1 0 0 0 0 /usr/bin/ps
希望能自动在一分钟之后显示进程。但是没有成功。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-3 12:27:42 | 显示全部楼层
Post by tony2u

/etc/rc.d/crond(Linux为crond sunos为cron) start file://启动进程
# crontab -l root
查看作业是否加入执行队列。
不行退出到登陆界面,再次登陆进入,还加载就reboot

谢谢你的解答,
我用sudo crontab -u root -l显示结果,

  1. ## 我也查看了/etc/cron.hourly/下的文件, 根本没有任何东西.
  2. #
  3. # DO NOT EDIT THIS FILE MANUALLY!! USE crontab -e INSTEAD.
  4. #

  5. # <minute> <hour> <day> <month> <dow> <command>


  6. 01 * * * *  /usr/sbin/run-cron /etc/cron.hourly
  7. 02 00 * * * /usr/sbin/run-cron /etc/cron.daily
  8. 22 00 * * 0 /usr/sbin/run-cron /etc/cron.weekly
  9. 42 00 1 * * /usr/sbin/run-cron /etc/cron.monthly
复制代码
Post by tony2u

你是不是直接编辑用户的cron文件呀?
如果是当然不运行,cron demon是在启动的时候才读一次配置文件.
如果你是后加的JOB 要用crontab -e来编辑用户的cron.
要不你 kill -HUP cron的进程ID.
重新启动这个进程.

是的, 我是直接编辑的用户cron文件, 因为我发现crontab-e时, 就是编辑的/var/spool/cron/<username>的文件. 那请问crond启动时, 读取的是/etc/cron.hourly文件吗? 我猜是这样的.

Post by tony2u

每5分钟做一次必须写成5,15,20,25,30,35,40,45,50,55 * * * *
===================================
"格式如下:
  (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   /usr/bin/updatedb
      1. 分钟 (0-60)
      2. 小时 (0-23)
      3. 日 (1-31)
      4. 月 (1-12)
      5. 星期 (1-7)
      6. 所要运行的程序
但是我设成 1 0 0 0 0 /usr/bin/ps
希望能自动在一分钟之后显示进程。但是没有成功。

如果是每分钟想启动一次, 可以

  1. */1 * * * * "/usr/local/bin/myapps/lockscreen.sh"
复制代码

"/"表示的就是每的意思, 我这时可以这样启动成功.

如果将cron文件放到/etc/cron.hourly/下, 应该是每小时启动一次吧. 但我想每45分钟启动一次, 请问应该怎样呢? 45分钟休息一次不错啦!

我经常以root用户登录一个tty, 然后再以普通用户登录一个tty进行日常的操作. 如果有时出现了什么问题, 需要大量的使用sudo, 我就换到root用户了. 那如果将cron文件放到/etc/cron.hourly/下, 那样root用户也不是会锁住吗? 那得将我的bash加入判断, root用户不锁住tty.
我想吧, 其实也可以在bash中使用sleep(<SOMETIME>)来进行控制时间来运行的, 但是既然有了cron, 用它则显得有些多此一举了, 而且又多了一个daemon的运行.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-14 11:30:50 | 显示全部楼层
我将lockscreen.sh的启动脚本放到/etc/crond.*上试过, 如果我没有在启动Archlinux后, 将crond重启一下, 这个脚本依然不会自动运行.
如果我在整点左右没有使用机器, lockscreen它运行了.
还有, 为什么它非在45分钟和整点都运行这个脚本呢? 我网上查了很多资料, "*/45"是每45分钟运行一次.

唉, 得了, 什么时候自己写个daemon来控制lockscreen.
回复 支持 反对

使用道具 举报

发表于 2007-9-14 13:03:42 | 显示全部楼层
推荐看看这个:用 cron 和 at 调度作业
http://www.ibm.com/developerworks/cn/linux/l-job-scheduling.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表