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

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

已解决,谢谢关注。原因为我的系统中缺少“run-parts”命令。

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

run-parts.sh
复制内容到剪贴板
代码:
#!/bin/bash

# Source:
#        [url]http://examples.oreilly.com/upt3/[/url]
# 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; }'
        fi
done

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”,内容为:
复制内容到剪贴板
代码:
#!/bin/bash

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

echo -e "$(date)\n\t-" >> "/tmp/cron_executed"
手工执行“/home/dba/123/db_maintenance/exec/export_new.sh”会在"/tmp/cron_executed"里产生一条记录。但自动执行没有这个效果。

我的“/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

# Test.
#        Do command at any minute.
#*        *        *        *        *        root        echo -e "$(date)\n\t-" >> $OUTPUT
#        Do command for every 1 minute.
#*/1        *        *        *        *        root        echo -e "$(date)\n\t1" >> $OUTPUT
#        Do command for every 2 minutes.
#*/2        *        *        *        *        root        echo -e "$(date)\n\t2" >> $OUTPUT
#        Do command for every 3 minutes.
#*/3        *        *        *        *        root        echo -e "$(date)\n\t3" >> $OUTPUT

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

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

脚本“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”的内容无变化。

原因不明,求解。

run-parts --lsbsysinit
貌似无效。

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

========================================
/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 编辑 ]
我的系统貌似缺少一个“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 /]#