crontab
奇怪的是,尽管脚本在 shell 终端上运行得很好,但它并没有执行我的脚本。我已经确保脚本之间用换行符分隔。但是,我对脚本的内容表示怀疑。crontab
执行run.sh
稍后将运行的main.sh
.
这是/etc/crontab
:
* * */3 * * root source /opt/db_maintain/run.sh
这是从内部run.sh
调用的内容:main.sh
#!/usr/bin/env bash
#********* Saman *********
TM=$(date --date='40 days ago' '+%F %T')
TARGET=/opt/db_maintain/main.sh
TIMESTAMP=$(echo ${TM} | tr --delete ': -')
export TIMESTAMP
source $TARGET "$TM"
这是以下的开始main.sh
:
#!/bin/bash
##!/usr/bin/env bash
#
# main program entry point
#
source /opt/db_maintain/functions.sh
source /opt/db_maintain/constants.sh
source /opt/db_maintain/settings.sh
source /root/PASSWD_PGRS.sh
#read -s -t 0 -n 9999
#read -s -p "Enter password for ${USERNAME}: " PASSWORD
答案1
在 cronjob 中使用以下语法:
* * */3 * * root /bin/bash /opt/db_maintain/run.sh
你用过source
.这是一个shell 内置命令从bash
。因此它只能在bash
shell 内或通过bash
shell 执行。 crontab 只执行二进制文件,而不执行 shell 命令。因此,您必须调用二进制文件 ( /bin/bash
),最好通过其绝对路径。