[已解决]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 编辑 ] 貌似无效。
我已使用绝对路径,自认为已经排除环境变量干扰。
========================================
/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”命令。我应该去哪里下载这个命令?怎么安装?
# 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]