schedule automate shell script 运行 不是 ROOT

schedule automate shell script running not as ROOT

我有一个 shell 脚本,我希望每天早上 8 点自动 运行,但我无权使用 crontab,因为我没有 root许可

我的主目录是 /home/user1/

有什么建议吗?

即使您没有 root 权限,您也可以设置 cron 作业。如果您可以修改它或抛出任何错误,请将这 2 个命令作为 user1 检查。

crontab -l

如果你能看到,那么也试试这个:

crontab -e

如果您可以打开和编辑,那么您可以 运行 使用 cron 的脚本。

通过添加此行:

* 08 * * * /path/to/your/script

理想情况下,您应该让您的系统管理员将您的用户帐户添加到 /etc/cron.allow - 否则您将无权使用 crontab 命令,正如您可能发现的那样。

如果那是不可能的,那么您可以使用包装器 shell 脚本沿着这些行(注意:未经测试):

#!/bin/bash

TIME="tomorrow 8am"

while :; do
    # Get the current time in seconds since the Epoch
    CURRENT=$(date +%s)
    # Get the next start time in seconds
    NEXT=$(date +%s -d "$TIME")

    # Sleep for the intervening time
    sleep $((NEXT-CURRENT))

    # Execute the command to repeat
    /home/user1/mycommand.sh
done

您在后台启动包装器脚本,或者例如在 screen 会话中,只要它处于活动状态,它就会定期执行您的脚本。请记住:

  • 很像cron,没有真正的准确性w.r.t。开始时间。如果您关心精确到秒的时间,那么这不是要走的路。
  • 如果脚本由于某种原因中断,例如服务器重启,您将不得不以某种方式重新启动。通常我会建议 crontab 中的 @reboot 条目,但这似乎不适合你。
  • 如果有某种进程清理机制可以终止长期用户处理,那你可能就不走运了。
  • 您的系统管理员可能只是忽略了允许用户访问 cron - 或者这可能是一个明确的决定。在第二种情况下,他们可能不会接受您为了绕过该限制而在一夜之间留下几个流程。

我认为创建 cron 作业不需要 root 权限。编辑不属于您的 cronjob - 您需要 root 权限。

在紧要关头,您可以使用 at(1)。确保您 运行 的程序重新安排了 at 作业。警告:如果机器停机任何时间,这都会很糟糕。