Cron Job 不执行

Cron Job 不执行

我以 root 身份使用以下命令创建了一个 cron 作业:

crontab -e

然后我0 4 24-31 * 4 /home/backupscript.sh在最后一行后面添加了。

输出crontab -e如下所示:

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
0 4 24-31 * 4 /home/backupscript.sh

我的脚本 /home/backupscript.sh 如下所示:

cd "/home/backups/"
datestring="$(date +%Y-%m-%d)"
sudo /opt/bitnami/ctlscript.sh stop
sudo tar -pczvf ${datestring}.openproject-backup.tar.gz /opt/bitnami
sudo /opt/bitnami/ctlscript.sh start

当我用 运行它时,它运行良好bash /home/backupscript.sh

答案1

确保脚本在直接执行时设置了执行标志,或者使用 bash 作为解释器并以脚本作为输入。

要使用 bash 作为解释器,请将行更改为0 4 24-31 * 4 bash /home/backupscript.sh

要设置脚本的执行标志,请使用:chmod +x /home/backupscript.sh

答案2

bash 脚本必须以 shebang 开头,以便让启动过程知道这是一个应该在 bash shell 中运行的脚本。因此,脚本的第一行应该是#!/bin/bash。这是一个很好的惯例,bash 脚本应该这样写。当前,脚本在运行时可以正常工作,bash /home/backupscript.sh因为您已经告诉它使用bash该命令的一部分来运行 bash shell。您可以通过编写 crontab 行来解决这个问题:

0 4 24-31 * 4 bash /home/backupscript.sh

这不是执行此操作的正确方法,因为它跳过了脚本的权限,尽管它可以工作。

很可能是您的脚本没有正确的权限,您需要设置执行位。这是命令的域chmod,有关如何使用它的说明可以在这里找到这里。

如果您希望系统上的任何人都能执行此命令,您可以运行:

chmod +x /home/backupscript.sh

尽管您可能希望将访问权限仅限于您的用户,但假设您的用户创建了脚本,该脚本将是:

chmod u+x /home/backupscript.sh

我的建议是将 shebang 添加到脚本的开头,并更改权限以使其可执行。

相关内容