使用 crontab 中的 Source 命令运行脚本

使用 crontab 中的 Source 命令运行脚本

我正在运行 Ubuntu 16.04 LTS

我有一个关于每月一次从 crontab 使用 OpenSSL 生成 CRL 文件的问题。

我有一个名为“gen-crl”的脚本,我可以从 /opt/vpn/openvpn-ca 运行,但 gen-crl 脚本位于其他地方,因为我为它创建了一个软符号链接:

lrwxrwxrwx 1 root root    27 May 17 22:48 gen-crl -> /usr/share/easy-rsa/gen-crl

gen-crl 脚本如下所示:

#!/bin/sh

# revoke a certificate, regenerate CRL,
# and verify revocation

CRL="crl.pem"

if [ "$KEY_DIR" ]; then
    cd "$KEY_DIR"

    # set defaults
    export KEY_CN=""
    export KEY_OU=""
    export KEY_NAME=""

    # required due to hack in openssl.cnf that supports Subject Alternative Names
    export KEY_ALTNAMES=""

    # generate a new CRL -- try to be compatible with
    # intermediate PKIs
    $OPENSSL ca -gencrl -out "$CRL" -config "$KEY_CONFIG"
    $OPENSSL crl -text -in "$CRL"
else
    echo 'Please source the vars script first (i.e. "source ./vars")'
    echo 'Make sure you have edited it to reflect your configuration.'
fi

仅当我在运行 gen-crl 脚本之前输入“source vars”时,该脚本才可运行。

现在我想从 cronjob 运行这个脚本,但现在这对我来说变得很棘手,因为在运行 gen-crl 脚本之前必须使用“源变量”。

我已经在 crontab 中尝试过这个作为测试,然后重新加载了 cron 守护进程(服务 cron reload):

*/1 *    * * *   root   source /opt/vpn/openvpn-ca/vars; /opt/vpn/openvpn-ca/gen-crl

但这不起作用,因为我可以通过 crl.pem 的时间戳看到它没有改变。

我怎样才能通过使用 source 命令从 crontab 运行这个 gen-crl 脚本?

答案1

@steeldriver ;你是对的;我现在让它工作了。

我尝试在 crontab 中执行此操作:

*/1 * * * * root . /opt/vpn/openvpn-ca/vars && /opt/vpn/openvpn-ca/gen-crl

但这不起作用。所以我generate-crl在中创建了一个文件/etc/cron.dailychmod 755相应地执行了它。然后我将其放入generate-crl文件中:

#!/bin/sh     

cd /opt/vpn/openvpn-ca 
. /opt/vpn/openvpn-ca/vars && /opt/vpn/openvpn-ca/gen-crl

现在它正在工作。谢谢你给我指明正确的方向!

相关内容