我目前正在尝试安排一个 cronjob 每分钟运行一个 .sh 脚本文件。
这是我的简单脚本:
#!/bin/sh
echo "Hello World" >> /Users/navania/crontab-scrip.log
我将其保存在桌面上,并将其命名为notify.sh。然后我打开一个新的终端窗口并输入crontab-e
。这打开了一个新的nano文件,我在里面输入:
* * * * * /Users/navania/Desktop/notify.sh
我保存并退出了这个 nano 文件。我下一步该怎么做才能让 cronjob 成功运行?
迄今为止的步骤:
- 打开终端应用程序并输入
crontab-e
。 - 这将打开一个新的 nano 文件,我在其中输入命令:
* * * * * /Users/navania/Desktop/notify.sh
- 然后我按下 Control o 来保存它,然后按下 Control x 以 CrontabTest 的名称保存它。
- 当我退出时,它说 crontab 没有做出任何更改,这没有意义。
- 然后我打开日志文件,看看它是否每分钟打印一次 Hello World,但事实并非如此。
任何帮助都将不胜感激。谢谢!
答案1
您的脚本很可能每分钟都尝试运行一次。
按照 Kamil 的步骤更改 crontab 行以包含 /bin/sh
稍微修改一下脚本,将其输出到文件,而不是尝试写入屏幕,因为该命令不会在终端中运行。相反,它会在自己的进程中运行,这就是您看不到任何输出的原因。
例如像这样更改脚本:
#!/bin/sh
echo "Hello World" >> /Users/navania/crontab-scrip.log
并检查您的 .log 文件,查看是否有新行写入其中。
答案2
您应该使脚本可执行:
chmod +x /Users/navania/Desktop/notify.sh
并确保保存脚本的文件系统未使用 挂载noexec
。然后命令
/Users/navania/Desktop/notify.sh
应该可以工作,cronjob 也应该可以工作。
或者,crontab 中的命令应该是
/bin/sh /Users/navania/Desktop/notify.sh
在这种情况下,可执行权限并不重要(脚本中的 shebang 也不重要)。
请注意不应期望 cronjob 的文本输出出现在任何终端中。
还有这个问题:
- 然后我按下 Control o 来保存它,然后按下 Control x 以 为名称保存它
CrontabTest
。- 当我退出时,它说 crontab 没有做出任何更改,这没有意义。
我认为您需要保存打开的任何临时文件,而不是新文件。保存时请勿更改名称。