cron 命令不起作用

cron 命令不起作用

作为超级用户,我crontab -e向源文件添加一行,cronsh.sh如下所示:

0 0 * * * source /home/myname/cronsh.sh

该文件的内容cronsh.sh是这一行:

date >> /home/myname/cronlog.txt

cronlog.txt但是第二天我检查文件时,文件是空的。我做错了什么?

先感谢您

答案1

CRON 用作sh其默认 shell,并且source是 Bash shell 内置命令,因此无法识别sh除 Bash 之外的任何链接,而系统 shell 则不是这种情况(默认情况下通常为 Dash)...另一方面,命令的等效项source应该.在那里工作...参见下面的演示:

$ echo "$0"
bash
$
$ type . source
. is a shell builtin
source is a shell builtin
$
$
$ sh
$
$ echo "$0"   
sh
$
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jul 11 12:03 /bin/sh -> dash
$
$ type . source
. is a special shell builtin
source: not found

因此尝试更改source.... 同样适用于的内容。因此请检查其语法是否 Dash 友好,或者在 crontab 文件中的 cronjob 之前/home/myname/cronsh.sh使用 Bash 并设置 CRON,如下所示:SHELL=/bin/bash

SHELL=/bin/bash
0 0 * * * source /home/myname/cronsh.sh

值得一提的是,你通常不需要获取 Bash 脚本来执行它(除非你故意希望它在当前调用 shell 中执行,而不是在子 shell 中执行),但更可取的方法是调用 Bash 解释器本身并将脚本文件作为参数提供,如下所示:

0 0 * * * /bin/bash /home/myname/cronsh.sh

...如果您在脚本中添加一个 shebang,指定正确的解释器来调用 ie #!/bin/bash,然后在授予其执行权限后将脚本作为可执行文件本身调用,那么这也应该有效,就像这样:

0 0 * * * /home/myname/cronsh.sh

... 这应该可以使您免于应用上面提到的其他建议。

相关内容