我以 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 添加到脚本的开头,并更改权限以使其可执行。