首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >克伦:我的crontabs似乎什么也没做

克伦:我的crontabs似乎什么也没做
EN

Unix & Linux用户
提问于 2011-04-06 13:41:56
回答 1查看 2.1K关注 0票数 2

我想我漏掉了什么。我已经在我的办公室中设置了一些crontab来处理ssh上的rsyncs,以处理一些备份,但它们似乎没有运行或日志记录。我是不是遗漏了什么?

这是我的电子标签:

0 2 * * * idealm /usr/bin/local/rsync -avz --rsync-path=/usr/bin/rsync -e ssh /Ideal\ Machinery\ Database/* i@192.168.0.210:~/db_backup >> /home/idealm/Work/cron_log.txt

^从Mac Mini服务器到中小企业服务器

0 2 * * * i /usr/bin/rsync -avz --rsync-path=/usr/local/bin/rsync -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/Converted\ Warehouse\ Pictures/* idealm@192.168.0.194:/ideal_img >> /home/i/cron_log.txt

^从中小企业服务器到Mini服务器

0 2 * * * i /usr/bin/rsync -rvz -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/* fm-backup@[remote server]:/home/fm-backup/img_all/ >> /home/i/cron_log.txt

0 2 * * * i /usr/bin/rsync -rvz -e ssh ~/db_backup/* fm-backup@[remote server]:~/db_backup/ >> /home/i/cron_log.txt

^从中小企业服务器到运行Ubuntu10.10的远程服务器(其中远程服务器是经过审查的地址)

问题是,当我从bash运行这些工作时,一切都很完美-- cron似乎不起作用。有什么建议吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2011-04-06 18:19:19

首先,尝试一些简单的cronjobs并从这里构建:

代码语言:javascript
复制
0 12 * * * user echo 'Hello, World!' >> /tmp/test.log 2>&1
1 12 * * * user ssh anotheruser@anotherhost ls >> /tmp/test.log 2>&1
2 12 * * * user rsync -e ssh anotheruser@anotherhost:/path/to/small/dir /tmp/test-dir >> /tmp/test.log 2>&1

一开始不要使用太多的选项,但是使用2>&1对于获取任何错误消息很重要。您还可以使用2>/tmp/test-error.log将它们发送到单独的文件中。通常情况下,cron在有任何输出的情况下才会生成电子邮件。此邮件被发送到crontab中的MAILTO环境变量中提到的电子邮件地址,或者发送给本地unix用户,作业被运行时就好像MAILTO没有设置一样。如果您没有安装邮件服务器,或者不确定如何访问它,则只需将所有输出重定向到文件即可。另一件事是设置SHELL。默认情况下,cron使用/bin/sh,这通常很好,甚至可能是某些系统上/bin/bash的一个符号链接,但如果没有--并且您希望在命令中使用bash,您可以在职务列表之前添加SHELL=/bin/bash或任何适当的东西。

我从上面的crontab中看到的另一个问题是空格。由于命令在普通shell上工作,这可能不是问题,但在使用某些远程ssh命令(如:ssh server ls "Music Videos" )时,要小心使用空格,这类命令中的空格需要双转义,因为本地shell和远程shell都可能对它们进行解释。正确的命令应该如下所示:ssh server ls "Music\\ Videos"ssh server ls '"Music Videos"'

我最后能想到的是ssh没有通过身份验证。我想您是在使用公钥身份验证。您的公钥存储在哪里?它在~/.ssh/id_rsa中是作为未加密的私钥,还是将其加载到SSH公钥代理中?如果由于磁盘上的副本是加密的,所以它被加载到代理中,则需要确保在crontab中手动设置SSH_AUTH_SOCK,以指向当rsync运行时将运行的代理。我通常会在磁盘上加密我的私钥,并且使用固定的套接字路径让ssh代理在后台运行。例如,我运行ssh-agent -a /tmp/user.agent,然后运行SSH_AUTH_SOCK=/tmp/user.agent ssh-add .ssh/id_rsa,将私钥加载到代理。我在脚本中有这两个命令,在每次重新启动后手动运行,因为我需要输入密码才能解锁私钥。然后,我的crontab文件中有SSH_AUTH_SOCK=/tmp/user.agent供我的自动cron作业使用。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/10748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档