自由狼-台风 发表于 2008-5-6 12:26:00

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

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

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

run-parts.sh#!/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; }'
      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”中每分钟都会添加“May6 12:13:01 xz_server crond: (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”命令。我应该去哪里下载这个命令?怎么安装?

# whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
# which ls
alias ls='ls --color=tty'
      /bin/ls
# whereis run-parts
run-parts:
# 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)
# run-parts
bash: run-parts: command not found
#
页: [1]
查看完整版本: [已解决]cron的run-parts执行问题。