作为超级用户,我crontab -e
添加一行来获取cronsh.sh
文件,如下所示:
0 0 * * * source /home/myname/cronsh.sh
文件的内容cronsh.sh
是这一行:
date >> /home/myname/cronlog.txt
cronlog.txt
然而,当我第二天检查该文件时,它是空的。我究竟做错了什么?
先感谢您
作为超级用户,我crontab -e
添加一行来获取cronsh.sh
文件,如下所示:
0 0 * * * source /home/myname/cronsh.sh
文件的内容cronsh.sh
是这一行:
date >> /home/myname/cronlog.txt
cronlog.txt
然而,当我第二天检查该文件时,它是空的。我究竟做错了什么?
先感谢您
CRON 使用
sh
作为其默认 shell,并且source
是 Bash shell 内置命令,因此在链接到 Bash 以外的任何内容时都无法识别,sh
这对于系统 shell 来说并非如此(默认情况下通常是 Dash)...另一方面,相当于 for该source
命令.
应该在那里工作...请参阅下面的演示:所以尝试更改
source
为.
... 这同样适用于内容/home/myname/cronsh.sh
。因此,请检查其语法是否适合 Dash,或者告诉 CRON 在 crontab 文件中的 cronjob 之前使用 Bash 并SHELL=/bin/bash
设置,如下所示:值得一提的是,您通常不需要获取 Bash 脚本来执行它(除非您故意希望它在当前调用 shell 中而不是在子 shell 中执行),但更优选的方法是调用 Bash解释器本身并提供脚本文件作为参数,如下所示:
...如果您将 shebang 添加到脚本中,指定正确的解释器来调用 ie
#!/bin/bash
,然后在授予脚本执行权限后将脚本本身作为可执行文件调用,那么这也应该起作用,如下所示:...这应该使您无需应用上述其他建议。