相关疑难解决方法(0)

从 cron 运行时,来自 Bitbucket 的 hg pull 失败

我在我的一台服务器上(在用户 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 中运行良好。

mercurial cron ssh-keys

5
推荐指数
1
解决办法
744
查看次数

crontab:身份验证令牌已过期;需要新的

我有一个 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

ubuntu cron

5
推荐指数
1
解决办法
2万
查看次数

使用 crontab 计划的重新启动没有继续。为什么会这样?

信息

我在 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)

如果我运行uptimewho -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,所以它肯定是在目标时间之前就位的。

问题

这可能行不通有什么原因吗?我可以以任何方式调试这个吗?

linux cron

5
推荐指数
1
解决办法
5170
查看次数

Cron 运行我的脚本但脚本没有做任何事情,与邮件错误有关???“得到状态 0x004b#012”

我管理的其中一台 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 …

email linux ubuntu cron

4
推荐指数
1
解决办法
2万
查看次数

如何在centos中使用crontab执行bash脚本?

我的 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 的根目录中

mysql bash cron

3
推荐指数
1
解决办法
3万
查看次数

作为 crontab 运行时,Linux Bash IF 条件未处理

因此,我为自己制作了一个小脚本,用于监视我的服务目录中是否存在已更改的任何 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)。

任何想法我做错了什么?

干杯,

马特。

linux bash cron

3
推荐指数
1
解决办法
4662
查看次数

crontab 失败,找不到 aws 可执行文件

我正在尝试在我的 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”工作正常。(已创建快照。)

有任何想法吗?

ubuntu cron amazon-ec2 amazon-ebs ubuntu-14.04

3
推荐指数
1
解决办法
1816
查看次数

数据库备份的 Cron 错误 getpwnam() 失败

尝试学习如何使用 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 来 …

php cron centos7

3
推荐指数
1
解决办法
1万
查看次数

Cron 作业无法备份 Postgres 数据库

我不确定这里发生了什么:

我有一个在 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 工作: …

postgresql backup cron

2
推荐指数
1
解决办法
3606
查看次数

什么在运行“certbot更新”?

我正在使用 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 lets-encrypt certbot

2
推荐指数
1
解决办法
1449
查看次数