如何设置每小时的 Cron 作业来从“/etc/cron.hourly”运行“grive”?

如何设置每小时的 Cron 作业来从“/etc/cron.hourly”运行“grive”?

我添加了文件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 中吗?

问候,

相关内容