QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4120|回复: 2

[已解决]cron的run-parts执行问题。

[复制链接]
发表于 2008-5-6 12:26:00 | 显示全部楼层 |阅读模式
已解决,谢谢关注。原因为我的系统中缺少“run-parts”命令。

我在 http://examples.oreilly.com/upt3/ 处找到一个“run-part”的简易替代品:

run-parts.sh
  1. #!/bin/bash

  2. # Source:
  3. #        [url]http://examples.oreilly.com/upt3/[/url]
  4. # Author:
  5. #        O'RIILY
  6. # Gain:
  7. #        2008-05-07 16:05

  8. # run-parts - concept taken from Debian

  9. # keep going when something fails
  10. set +e

  11. if [ $# -lt 1 ]; then
  12.         echo "Usage: run-parts <dir>"
  13.         exit 1
  14. fi

  15. if [ ! -d $1 ]; then
  16.         echo "Not a directory: $1"
  17.         exit 1
  18. fi

  19. # Ignore *~ and *, scripts
  20. for i in $1/*[^~,] ; do
  21.         [ -d $i ] && continue
  22.         # Don't run *.{rpmsave,rpmorig,rpmnew,swp} scripts
  23.         [ "${i%.rpmsave}" != "${i}" ] && continue
  24.         [ "${i%.rpmorig}" != "${i}" ] && continue
  25.         [ "${i%.rpmnew}" != "${i}" ] && continue
  26.         [ "${i%.swp}" != "${i}" ] && continue
  27.         [ "${i%,v}" != "${i}" ] && continue

  28.         if [ -x $i ]; then
  29.                 $i 2>&1 | awk -v "progname=$i" \
  30.                                 'progname {
  31.                                         print progname ":\n"
  32.                                         progname="";
  33.                                 }
  34.                                 { print; }'
  35.         fi
  36. done

  37. exit 0
复制代码
========================================
#!/bin/bash# Source:
#        http://examples.oreilly.com/upt3/
# Author:
#        O'RIILY

# Gain:
#        2008-05-07 16:05

# run-parts - concept taken from Debian

# keep going when something fails
set
+e
if
[ $# -lt 1 ]; then
        echo "Usage: run-parts <dir>"
        exit 1
fi


if
[ ! -d $1 ]; then
        echo "Not a directory: $1"
        exit 1
fi


# Ignore *~ and *, scripts

for
i in $1/*[^~,] ; do
       [ -d $i ] && continue
        # Don't run *.{rpmsave,rpmorig,rpmnew,swp} scripts
       [ "${i%.rpmsave}" != "${i}" ] && continue
       [ "${i%.rpmorig}" != "${i}" ] && continue
       [ "${i%.rpmnew}" != "${i}" ] && continue
       [ "${i%.swp}" != "${i}" ] && continue
       [ "${i%,v}" != "${i}" ] && continue
        if [ -x $i ]; then
                $i 2>&1 | awk -v "progname=$i" \
                                'progname {
                                           print progname ":\n"
                                           progname="";

                                }

                                { print; }'

        fidone
exit
0

########################################
以下为原始问题。
########################################


试图每分钟都自动定时执行某任务失败。

打算自动执行的脚本为“/home/dba/123/db_maintenance/exec/export_new.sh”,内容为:

  1. #!/bin/bash

  2. #        Exporting database by cron.
  3. #        Author:
  4. #                Typhoon.Free.Wolf
  5. #        Version:
  6. #                2008-05-06-01

  7. echo -e "$(date)\n\t-" >> "/tmp/cron_executed"
复制代码


手工执行“/home/dba/123/db_maintenance/exec/export_new.sh”会在"/tmp/cron_executed"里产生一条记录。但自动执行没有这个效果。

我的“/etc/crontab”如下:

  1. #        Generated by:
  2. #                T.F.W
  3. #        Creating:
  4. #                2008-05-04

  5. SHELL=/bin/bash
  6. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  7. MAILTO=root
  8. HOME=/
  9. OUTPUT=/tmp/cron_executed

  10. # Test.
  11. #        Do command at any minute.
  12. #*        *        *        *        *        root        echo -e "$(date)\n\t-" >> $OUTPUT
  13. #        Do command for every 1 minute.
  14. #*/1        *        *        *        *        root        echo -e "$(date)\n\t1" >> $OUTPUT
  15. #        Do command for every 2 minutes.
  16. #*/2        *        *        *        *        root        echo -e "$(date)\n\t2" >> $OUTPUT
  17. #        Do command for every 3 minutes.
  18. #*/3        *        *        *        *        root        echo -e "$(date)\n\t3" >> $OUTPUT

  19. #        Export database at XX:00, XX:30 in each day.
  20. */1        *        *        *        *        dba        /home/dba/123/pg_db_export/export.sh #这个是每分钟都执行了。

  21. #        Maintence database once for each minute.
  22. */1        *        *        *        *        dba        run-parts /home/dba/123/db_maintenance/exec/ #这个目录内有

  23. 脚本“export_new.sh”,但貌似执行没效果。
复制代码


自动执行时,“/var/log/cron”中每分钟都会添加“May  6 12:13:01 xz_server crond[6980]: (dba) CMD (run-parts /home/dba/123/db_maintenance/exec/)”记录,但“/tmp/cron_executed”的内容无变化。

原因不明,求解。

[ 本帖最后由 自由狼-台风 于 2008-5-7 16:27 编辑 ]
 楼主| 发表于 2008-5-7 11:04:45 | 显示全部楼层
貌似无效。

我已使用绝对路径,自认为已经排除环境变量干扰。

========================================
/etc/crontab
----------------------------------------
#        Generated by:
#                T.F.W
#        Creating:
#                2008-05-04

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
OUTPUT=/tmp/cron_executed

# Task A.
*        *        *        *        *        root        /root/123/cron_test/a/test

# Task B.
*        *        *        *        *        root        run-parts /root/123/cron_test/b

# Task C.
*        *        *        *        *        root        run-parts --lsbsysinit /root/123/cron_test/c

========================================

========================================
/root/123/cron_test/a/test
/root/123/cron_test/b/test
/root/123/cron_test/c/test
----------------------------------------
#!/bin/bash

#        Exporting database by cron.
#        Author:
#                Typhoon.Free.Wolf
#        Version:
#                2008-05-07-01

/bin/echo -e "Test\n\tA" >> "/root/123/cron_test/test_output" #(三个脚本只在此行有差别,分别输出A、B、C)。

========================================

“/root/123/cron_test/test_output”中只有“Task A”的输出,始终不见“Task B”和“Task C”的输出:
----------------------------------------
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A
Test
    A

========================================

[ 本帖最后由 自由狼-台风 于 2008-5-7 11:22 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2008-5-7 12:58:25 | 显示全部楼层
我的系统貌似缺少一个“run-parts”命令。我应该去哪里下载这个命令?怎么安装?

[root@TFW-ML201-DT /]# whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@TFW-ML201-DT /]# which ls
alias ls='ls --color=tty'
        /bin/ls
[root@TFW-ML201-DT /]# whereis run-parts
run-parts:
[root@TFW-ML201-DT /]# which run-parts
/usr/bin/which: no run-parts in (/usr/bt/azureus:/usr/bt/azureus:/usr/bt/azureus:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:/usr/java/jre1.5.0_05/bin:/myops/exec:/root/bin:/usr/java/jre1.5.0_05/bin:/myops/exec:/etc/init.d:/myops/exec:/opt/prog/m/PostgreSQL.MagicLinux-2.0/bin:/opt/prog/m/Java/J2SDK/bin:/opt/prog/m/Eclipse:/opt/prog/c/Apache/Tomcat/bin:/opt/prog/c/Apache/Httpd/bin:/opt/prog/m/VNC:/opt/prog/m/Firefox:/opt/prog/c/Gftp/bin:/opt/prog/m/NVU)
[root@TFW-ML201-DT /]# run-parts
bash: run-parts: command not found
[root@TFW-ML201-DT /]#
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-12-1 18:53 , Processed in 0.040460 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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