![如何设置每小时的 Cron 作业来从“/etc/cron.hourly”运行“grive”?](https://linux22.com/image/1203952/%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%E6%AF%8F%E5%B0%8F%E6%97%B6%E7%9A%84%20Cron%20%E4%BD%9C%E4%B8%9A%E6%9D%A5%E4%BB%8E%E2%80%9C%2Fetc%2Fcron.hourly%E2%80%9D%E8%BF%90%E8%A1%8C%E2%80%9Cgrive%E2%80%9D%EF%BC%9F.png)
我添加了文件grive.sh
,/etc/cron.daily
但命令似乎没有运行。我也将其复制到,/etc/cron.hourly
但没有任何变化,只有我的 Google Drive 目录。该文件只有三行:
#! /bin/sh
cd /media/james/Seagate Expansion Drive/GD
grive
权限是只读的,因此我将更新它们。
我使用了/etc/cron.hourly# chmod u+rwx grive.sh
,但是当我在 Nautilus 中检查文件的权限时,它们没有改变——我不知道为什么。
我可以grive
从终端手动运行,并且文件在本地和在线同步。
root@james-Streacom:/etc/cron.hourly# grep CRON /var/log/syslog
Feb 1 09:17:02 james-Streacom CRON[8696]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 1 10:17:01 james-Streacom CRON[10958]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 1 11:17:01 james-Streacom CRON[12897]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 1 12:17:01 james-Streacom CRON[15307]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 1 13:17:01 james-Streacom CRON[17043]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 1 14:17:01 james-Streacom CRON[17354]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 1 15:17:01 james-Streacom CRON[17705]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
root@james-Streacom:/etc/cron.hourly# cd / && run-parts --report /etc/cron.hourly
root@james-Streacom:/# bash -c "cd / && run-parts --report /etc/cron.hourly"
root@james-Streacom:/#
请注意,这可能是当 cron 任务放入 `/etc/cron.hourly/` 中时,它不起作用,但在 `crontab -e` 中定义时,它起作用,我只是按照这些步骤进行。
我将其添加echo test >/tmp/foobar.tmp
到脚本的最后一行。
root@james-Streacom:/etc/cron.hourly# grep 'cron\.hourly' /etc/crontab
17 * * * * root cd / && run-parts --report /etc/cron.hourly
/temp/foobar.tmp
不存在。
我尝试实际运行# cd /media/james/Seagate Expansion Drive/GD
,但出现错误-su: cd: too many arguments
。然后我将脚本中的 cd 行更改为cd /media/james/"Seagate Expansion Drive"/GD
。
$ echo test >/tmp/foobar.tmp
确实创建了包含测试的文件。
# echo test2 >/tmp/foobar.tmp
用 test2 覆盖测试。
答案1
除了原始脚本中未加引号的空格(您似乎已对其进行了更正)之外,问题可能还出在脚本的命名上。
根据以下DEBIAN SPECIFIC
部分man cron
:
As described above, the files under these directories have to be pass some sanity checks including the following: be executable, be owned by root, not be writable by group or other and, if symlinks, point to files owned by root. Additionally, the file names must conform to the filename requirements of run-parts: they must be entirely made up of letters, digits and can only contain the special signs underscores ('_') and hyphens ('-'). Any file that does not conform to these requirements will not be executed by run-parts. For example, any file containing dots will be ignored. This is done to prevent cron from running any of the files that are left by the Debian package management system when handling files in /etc/cron.d/ as configuration files (i.e. files ending in .dpkg-dist, .dpkg-orig, and .dpkg-new).
由于grive.sh
其名称中有一个点,run-parts
因此将忽略它。
答案2
我不太明白你的问题,虽然根据我的经验,当你将某些命令添加到脚本并放入 cronjob 中时,它们无法按预期工作。
我将首先将其添加到/etc/cron.d/test
以下新文件中(我将每 5 分钟配置一次,只是为了获取一些用于测试目的的日志):
# m h dom mon dow user command
*/5 * * * * root [DIR_TO_SCRIPT]/grive.sh >> /var/log/grivesh.log 2>&1
请参阅中的 stdout /var/log/grivesh.log
,一旦您对其进行了分析,您就可以像这样每小时配置一次 cronjob(例如每小时第 5 分钟):
# m h dom mon dow user command
5 * * * * root [DIR_TO_SCRIPT]/grive.sh >> /var/log/grivesh.log 2>&1
有必要把它放进去吗/etc/cron.hourly/
?你不想把它放在/etc/cron.d/
用户的 crontab 中吗?
问候,