出于某种原因,我的 crontab 没有运行每小时/每周/等脚本。似乎运行部件不起作用,我也无法让它在我的本地机器上运行。我使用它的方式有错误吗?
fabe@fabetop ~ $ cat /home/fabe/tmp/test.sh
#!/bin/sh
touch /home/fabe/tmp/test_it
fabe@fabetop ~ $ ls -la /home/fabe/tmp
total 32
drwx------ 2 fabe fabe 4096 Feb 20 15:00 .
drwx------ 60 fabe fabe 16384 Feb 20 15:00 ..
-rwxr-xr-x 1 fabe fabe 39 Feb 20 15:00 test.sh
fabe@fabetop ~ $ run-parts --report /home/fabe/tmp
fabe@fabetop ~ $ ls -la /home/fabe/tmp
total 32
drwx------ 2 fabe fabe 4096 Feb 20 15:00 .
drwx------ 60 fabe fabe 16384 Feb 20 15:00 ..
-rwxr-xr-x 1 fabe fabe 39 Feb 20 15:00 test.sh
Run Code Online (Sandbox Code Playgroud)
ter*_*don 20
问题是脚本的名称。来自man run-parts
:
如果 --lsbsysinit 选项和 --regex 选项都没有给出,则名称必须完全由 ASCII 大写和小写字母、ASCII 数字、ASCII 下划线和 ASCII 减号连字符组成。
换句话说,没有扩展。奇怪的是,即使有这个--lsbsysinit
选项,你也不能指定一个文件,foo.sh
因为它不匹配涵盖的命名空间:
如果提供了 --lsbsysinit 选项,则名称不得以 .dpkg-old 或 .dpkg-dist 或 .dpkg-new 或 .dpkg-tmp 结尾,并且必须属于以下一个或多个命名空间:LANANA分配的命名空间 (^[a-z0-9]+$); LSB 分层和保留命名空间 (^_?([a-z0-9_.]+-)+[a-z0-9]+$); 和 Debian cron 脚本命名空间 (^[a-zA-Z0-9_-]+$)。
所以,虽然foo.sh
失败了,foo.s-h
还是foo.-sh
会奏效。我不知道他们为什么这样做,但大概他们遵循某种标准或其他标准。
无论如何,您有 2 个选项,要么将脚本重命名为没有扩展名(无论如何,扩展名在 *nix 中都是可选的),或者您可以run-parts
完全跳过使用。改用它crontab
:
find /home/fabe/tmp/ -prune -type f -executable -exec {} \;
Run Code Online (Sandbox Code Playgroud)
上面的命令将找到目标目录中的所有可执行文件并运行它们。我认为这-executable
是一个 GNU 扩展,但您已将其标记为 Linux,因此我假设您已找到 GNU。
放置在文件夹中的每个脚本/etc/cron.hourly
将每小时运行一次。
但是您的文件需要是:
(^[a-zA-Z0-9_-]+$)
。因此,例如,如果您的脚本带有扩展名(.sh
在本例中),它将无法工作。
要打印将运行的脚本的名称,请尝试:
sudo run-parts --report --test /etc/cron.hourly
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9654 次 |
最近记录: |