Answers:
正确的方法是使用Crontab - 如果您无权访问您的crontab,您真的应该与您的管理员联系 - 他们可能不希望您运行预定的工作。也就是说,在您说没有crontab命令的权限之前,请尝试运行“crontab -e” - 每个用户都有自己的cron文件,而crontab将尝试编辑您的cron文件。 (我注意到当我作为用户运行crontab时它只是冻结)
您可以通过添加“&”来完成在后台运行的任何工作。工作的性格。我会反对这一点,但你可以在while循环中编写一个脚本来检查时间,然后等待一分钟,再次检查等,如果匹配则执行命令。您可以使用&运行此脚本在后台运行它。你也可能因颠覆系统而陷入困境....
查找的另一个命令是“屏幕”。这允许您从控制台连接和分离终端 - 它可以是在后台运行某些东西的有用方法,但能够查看并与之交互(您可以在前台执行屏幕,然后执行程序,然后分离从屏幕,然后重新连接)
编辑
一个脚本,用于检查每分钟一次的时间并在适当的时间运行命令:
#! /bin/bash
RUNAT="07:54"
while [ 1 ]
do
DATE=`/bin/date +%H:%M`
if [ $DATE. = $RUNAT. ]
then
/path/to/script.sh
fi
sleep 60
done
将其保存为(例如)mycron.sh,chmod 755 mycron.sh以便执行, 修改RUNAT行以在需要运行脚本时触发,然后将此脚本作为mycron.sh&执行。所以它在后台运行。
这个脚本不会导致任何堆栈溢出,因为它每天只执行一次命令,它不会“链接自己”
只要您有权访问 在 (不太可能 cron的 不可用,但值得一试)你可以模仿简单的cron工作。最简单的方法是make 在 在给定时间运行脚本,然后让脚本生成 在 必须运行时再次运行。
在我的示例中,脚本仅写入其上次运行的时间戳并执行一分钟的时间:
/tmp$ cat cronbyat.sh
#!/bin/sh
echo "last run: `date +%Y%m%d-%H%M%S`" >> /tmp/cronbyat.log
echo "/tmp/cronbyat.sh" | at now + 1 minute
/tmp$ echo "/tmp/cronbyat.sh" | at now + 1 minute
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 15 09:00:00 2016
/tmp$ tail -f /tmp/cronbyat.log
last run: 20160215-090000
last run: 20160215-090100
last run: 20160215-090200
last run: 20160215-090301
last run: 20160215-090400
^C
/tmp$ atq
10 Mon Feb 15 09:05:00 2016 a lx
/tmp$ atrm 10
/tmp$ atq
/tmp$
当不再需要脚本时,必须终止其当前作业,如最后一行所示。 不幸的是,如果由于任何原因错过了一次运行,链条就会被打破。因此,应该给出并检查某种反馈。
crontab -e
也是不允许的。正如您建议使用while循环编写脚本,这不会导致堆栈溢出吗?你提到“等一下”,就意味着要用sleep
?