我在我的一台服务器上(在用户 rob 下)有一个 Bitbucket 存储库的本地副本,我创建了一个脚本,该脚本在 cron 中每小时运行一次,并尝试拉取和更新本地副本。我遇到的问题是hg pull失败,即使当我在 cron 之外遵循相同的程序时它也能正常工作。
我设置了一个以正常方式访问 Bitbucket 的 ssh 密钥(即遵循 Bitbucket 文档中的指南),然后 repo 最初被克隆
cd /home/rob
hg clone ssh://hg@bitbucket.org/robjohncox/tools
Run Code Online (Sandbox Code Playgroud)
更新脚本在/home/rob/bin/update_tools.sh:
#! /bin/bash
cd /home/rob/tools
hg pull >> /tmp/update_tools.log
hg update >> /tmp/update_tools.log
Run Code Online (Sandbox Code Playgroud)
用户 rob 的 crontab 是:
0 * * * * /home/rob/bin/update_tools.sh
Run Code Online (Sandbox Code Playgroud)
一切都非常简单。但是,当作业运行时,我们看到调用hg pull失败并输出
remote: Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)
有没有人知道为什么会发生这种情况 - 我是否需要采取其他一些步骤,以便在 cron 运行时它可以访问相关的公钥?该update_tools.sh脚本在 shell 中运行良好。
我有一个 crontab 作业每天作为非 root 用户作业运行。不幸的是,它确实停止工作并显示以下消息(在 /var/log/syslog 中):
CRON[29256]: Authentication token is no longer valid; new one required
Run Code Online (Sandbox Code Playgroud)
我没有更改运行此作业的用户的密码,密码也没有过期。是什么导致了这个问题以及如何解决它?- 最好不需要每 x 天更改用户密码。
Ubuntu 14.04.1 LTS
信息
我在 Debian 10 上为 root 用户提供了以下 crontab。
root@debian:~# crontab -l
# crontab comments curtailed for serverfault
#
# m h dom mon dow command
30 3 * * * shutdown -r now
Run Code Online (Sandbox Code Playgroud)
如果我运行uptime并who -b得到上次手动重启的结果(昨天下午 6 点左右)。
root@debian:~# uptime
11:03:19 up 16:29, 1 user, load average: 0.00, 0.01, 0.00
root@debian:~# who -b
system boot 2020-12-26 18:34
Run Code Online (Sandbox Code Playgroud)
我昨天晚上 7 点左右创建了 crontab,所以它肯定是在目标时间之前就位的。
问题
这可能行不通有什么原因吗?我可以以任何方式调试这个吗?
我管理的其中一台 Ubuntu 10.10 Web 服务器有一个非常奇怪的问题。
我使用 ruby 和 rake 编写了一个脚本来运行一些 tar 命令并执行数据库的 mysqldump。我在 root 用户 crontab 中安装了一个条目,如下所示:
0 0,12 * * * /bin/bash -l -c 'cd /my/script/path && rake backup:everything'
Run Code Online (Sandbox Code Playgroud)
这在其中一台服务器上运行良好。然而另一方面,这实际上似乎并没有执行我的脚本中的内容。
我知道它被要求确定,因为当我跑步时
grep CRON /var/log/syslog
Run Code Online (Sandbox Code Playgroud)
它返回:
Mar 22 12:00:01 ServerName CRON[10273]: (root) CMD (/bin/bash -l -c 'cd /my/script/path && rake backup:everything')
Run Code Online (Sandbox Code Playgroud)
但是,它绝对不是在该脚本中执行的操作。
当我像这样直接运行脚本时:
cd /my/script/path && sudo rake backup:everything
Run Code Online (Sandbox Code Playgroud)
它完美地工作。
我也在两台服务器的 crontab 中做了这个:
0 0,12 * * * /bin/bash -l -c 'cd /my/script/path && rake backup:everything >> output.txt'
Run Code Online (Sandbox Code Playgroud)
(就像在脚本中一样,我每隔一段时间就会“放置'备份 x …
我的 bash 文件不是由以 root 身份创建的 cronjob 执行的。cronjob 设置如下所示
0 0 * * * mysql_backup.sh
Run Code Online (Sandbox Code Playgroud)
是否需要使用 bash 命令进行 decalared 0 0 * * * bash mysql_backup.sh?如果我手动执行我的 bash 脚本而sudo bash mysql_backup.sh不是它的工作。
我一直在使用创建 cronjobsudo crontab u root -e并且 bash 文件位于 centos 的根目录中
因此,我为自己制作了一个小脚本,用于监视我的服务目录中是否存在已更改的任何 PHP 文件。它旨在从 crontab 每 5 分钟运行一次,并将任何更改通过电子邮件发送给我,以便我可以检查它们。
有很多网站在机器上运行,如果你知道我的意思,我希望能够关注任何新脚本以确保那里没有我不喜欢的外观。
问题是当我从命令行运行脚本时,脚本运行 100% 正常,但它不能从 crontab 正确运行。该脚本包含在下面:
rm /root/sec/email
find /var/www/ -name '*.php' -not -name '*.tpl.*' -type f -mtime -0.005 -exec ls -al {} \; > /root/sec/email
if [[ -s /root/sec/email ]] ; then
mail -s "PHP Change Alert on FSE4" matt@aroxo.com muji@aroxo.com < /root/sec/email
echo "It ran" >> /root/sec/log
else
echo "It did not run" >> /root/sec/log
fi ;
Run Code Online (Sandbox Code Playgroud)
问题在于 IF 条件。即使名为“email”的文件的大小不为零,if 子句的错误一侧也会触发(else)。
任何想法我做错了什么?
干杯,
马特。
我正在尝试在我的 ec2 亚马逊服务器(ubuntu 14.04)上运行备份脚本,以自动创建亚马逊 ebs 卷的快照。因此我使用 aws-missing-tools 脚本:https : //github.com/colinbjohnson/aws-missing-tools/tree/master/ec2-automate-backup
这是我的备份脚本,它触发 ec2-automate-backup-awscli.sh:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin/aws
HOME=/
JAVA_HOME=/usr/lib/jvm/default-java/jre/
MAILTO=xxx.xxxxxx@me.com
AWS_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxx
AWS_SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
/opt/aws/ec2-automate-backup-awscli.sh -r us-east-1 -s tag -t 'Backup,Values=true' -k 31 -p
Run Code Online (Sandbox Code Playgroud)
但是我只在使用 crontab 调度此脚本时收到此错误:
26 23 * * * /opt/aws/backup.sh >> /var/log/aws.log 2>&1
Run Code Online (Sandbox Code Playgroud)
日志文件:“为了使用 ec2-automate-backup-awscli.sh,必须安装可执行文件“aws”。”
直接执行“sh backup.sh”工作正常。(已创建快照。)
有任何想法吗?
尝试学习如何使用 php 实现 cron 作业。
cron 的格式是这样的 /etc/crontab
* 13 * * * /usr/bin/php /var/www/path/to/file/database-bkup-test.php &>/tmp/mycroncommand.log
Run Code Online (Sandbox Code Playgroud)
所以这应该每天运行 13 小时(下午 1 点)
我查看了服务的状态
须藤 systemctl 状态 crond.service -l
发现以下错误:
(/usr/bin/php) 错误 (getpwnam() 失败)
我使用 PHP 进行了设置,脚本基本上是这样的:
$today = date('Y-m-d');
$user = 'db_user';
$password = 'db_password';
$host = '127.0.0.1'; //this is actually replaced with an address to another remote server
$port='3306';
$database='database_name';
exec('mysqldump --user='.$user.' --password='.$password.' --host='.$host.' --port='.$port.' '.$database.' > /db-bkup/db-'.$today.'.sql');
Run Code Online (Sandbox Code Playgroud)
最终结果将是一个数据库转储到一个文件中:
db-2017-03-24.sql
有人可以帮助我吗?
我花时间阅读并尝试实现这一点。我发现这篇文章非常有帮助
由于作业失败,整个过程甚至没有在/tmp.
更新
添加了一个简单的 cron 来 …
我不确定这里发生了什么:
我有一个在 root 下运行良好的备份脚本。它会在正确的目录中生成一个 >300kb 的数据库转储。
但是,当使用完全相同的命令将其作为 cron 作业运行时,会出现一个空的 gzip 文件,其中没有任何内容。
cron 日志显示没有错误,只是命令已运行。
这是脚本:
#! /bin/bash
DIR="/opt/backup"
YMD=$(date "+%Y-%m-%d")
su -c "pg_dump -U postgres mydatabasename | gzip -6 > "$DIR/database_backup.$YMD.gz" " postgres
# delete backup files older than 60 days
OLD=$(find $DIR -type d -mtime +60)
if [ -n "$OLD" ] ; then
echo deleting old backup files: $OLD
echo $OLD | xargs rm -rfv
fi
Run Code Online (Sandbox Code Playgroud)
当改为:
pg_dump -U postgres mydatabasename | gzip -6 > "$DIR/database_backup.$YMD.gz"
Run Code Online (Sandbox Code Playgroud)
同样的事情发生。
和 cron 工作: …
我正在使用 Let's Encrypt 来保护 Ubuntu 上的 Apache 安装。我最近设置了一个部署挂钩脚本以在续订时运行,我正在certbot renew使用该--deploy-hook选项在 cron 作业中传递给它。
在设置后的第一次更新时,我注意到部署钩子脚本没有运行。深入研究日志,我发现certbot renew实际执行更新的调用并未使用--deploy-hook参数调用。
我还看到它certbot renew每天被调用 3 次,而我的 cron 作业只设置为每天运行一次。这三个调用之一恰好在 cron 作业中指定的时间,并且--deploy-hook提供了参数。另外两个时间是大约 00:30 和大约 12:45,但确切的时间每天都有几分钟的变化。--deploy-hook其他调用不提供该参数。
那么:certbot renew除了我的 cron 工作之外,到底在运行什么?我确认只有root一个crontab, 并且它只包含单个作业定义。
cron ×10
linux ×3
ubuntu ×3
bash ×2
amazon-ebs ×1
amazon-ec2 ×1
backup ×1
centos7 ×1
certbot ×1
email ×1
lets-encrypt ×1
mercurial ×1
mysql ×1
php ×1
postgresql ×1
ssh-keys ×1
ubuntu-14.04 ×1