Questions tagged «cron»

Cron是一个作业调度程序,它允许用户定期运行命令。


7
cron执行作业时,“工作目录”是什么?
当我从命令行运行它时,我有一个可以运行的脚本,但是当我对其进行计划时,却cron收到了无法找到文件或命令的错误。我的问题是双重的: 当我使用计划Cron作业时crontab -e,它是否使用我的用户ID作为其权限的基础?还是使用某种cron用户ID及其相关权限? 启动cron作业时,工作目录是什么?是我指定要运行脚本的目录,还是其他目录? 这是我的Cron工作: 15 7 * * * /home/xxxx/Documents/Scripts/email_ip_script.sh 这是实际的脚本: vIP_ADDR="`curl automation.whatismyip.com/n09230945.asp`" echo "$vIP_ADDR" sed "s/IPADDR/$vIP_ADDR/g" template.txt > emailmsg.txt ssmtp XXXXX@gmail.com < emailmsg.txt 这是我查看mail产生的消息时遇到的错误cron: sed: can't read template.txt: No such file or directory /home/xxxx/Documents/Scripts/email_ip_script.sh: line 15: ssmtp: command not found 它找不到,template.txt但与脚本位于同一目录中。它也无法运行ssmtp,但是我可以作为用户。我缺少什么让它正常工作?



6
如何在cron标签作业中执行`date`?
我想为cron脚本创建一个日志文件,该日志文件名称中包含当前小时。这是我尝试使用的命令: 0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log 不幸的是,我在运行时收到此消息: /bin/sh: -c: line 0: unexpected EOF while looking for matching ``' /bin/sh: -c: line 1: syntax error: unexpected end of file 我尝试过date各种方式使零件逃脱,但运气不佳。是否可以在crontab文件中在线进行此操作,还是需要创建Shell脚本来执行此操作?


11
如何使用现有环境变量运行cron命令?
如何使用现有环境变量运行cron命令? 如果我在shell提示下可以键入echo $ORACLE_HOME并获取路径。这是我设置的环境变量之一~/.profile。但是,似乎~/.profile没有加载fron cron脚本,因此我的脚本失败了,因为$ORACLE_HOME未设置变量。 在这个问题中,作者提到创建一个~/.cronfile配置文件,该配置文件为cron设置变量,然后他采取了一种变通方法,将所有cron命令加载到他保存在~/Cron目录中的脚本中。像~/.cronfile这样的文件听起来像是个好主意,但其余的答案似乎有点麻烦,我希望有人可以告诉我一种更简单的方法来获得相同的结果。 我想在脚本开始时我可以添加类似的内容,source ~/.profile但这似乎是多余的。 那么,如何使我的cron脚本从交互式shell配置文件中加载变量?

2
如何将输出从cron重定向到文件?
我有一个备份脚本,需要在一天的特定时间运行,因此我正在cron执行此任务,并且在cron中,我还尝试将备份脚本的输出重定向到logfile。 crontab -e */1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log 在上面的cron条目中,我都将两者都重定向stderr and stdout到日志文件。 上面的cron作业可以很好地执行,syslog 并且可以执行backup.sh文件中提到的任务,但不会向日志文件写入任何内容。 /var/log/syslog Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log) 当我从cli运行脚本时,它会按要求运行,并且输出将写入日志文件 ranveer@ranveer:~$ ./backup.sh &>> backup.log ranveer@ranveer:~$ cat backup.log Fri Oct 19 20:28:01 IST 2012 successfully copied testdir test.txt successfully copied ------------------------------------------------------------------------------------- ranveer@ranveer:~$ 因此,为什么文件输出没有从cron中重定向到文件。

2
Cron vs Systemd计时器
最近向我指出,存在cron的替代方法,即systemd计时器。 但是,我对systemd或systemd计时器一无所知。我只用过cron。 Arch Wiki中有一些讨论。但是,我正在寻找cron和systemd计时器之间的详细比较,重点是优点和缺点。我使用Debian,但是我想对所有这两种可用的系统进行一般比较。该集合可能仅包括Linux发行版。 这就是我所知道的。 Cron很老,可以追溯到1970年代后期。cron的原始作者是Unix的创建者Ken Thompson。Vixie cron的历史可以追溯到1987年,其中Vixie cron是现代Linux发行版中的重头戏。 Systemd较新,并且颇有争议。维基百科告诉我它的最初版本是2010年3月30日。 因此,我当前的cron与systemd计时器相比的优点列表是: 从可安装的受支持软件的意义上讲,Cron被保证可以在任何类Unix系统中使用。那不会改变。相比之下,systemd将来可能会或可能不会保留在Linux发行版中。它主要是一个初始化系统,并且可以由其他初始化系统代替。 Cron易于使用。绝对比systemd计时器简单。 与cron相比,systemd计时器的优点列表如下: 系统计时器可能更灵活,功能更强大。但我想举个例子。 因此,总而言之,下面是一些可以在答案中看到的东西: cron计时器与systemd计时器的详细比较,包括使用每个计时器的利弊。 一个人可以做的事而另一个不能做的事的例子。 cron脚本与systemd timers脚本的至少一个并排比较。

4
打开远程X显示器上的窗口(为什么“无法打开显示器”)?
很久以前, DISPLAY=:0.0 totem /path/to/movie.avi 从笔记本电脑ssh进入我的桌面后,图腾会movie.avi在我的桌面上播放。 现在,它给出了错误: No protocol specified Cannot open display: 当两台计算机都稳定下来时,我重新安装了Debian squeeze,我想我打破了配置。 我已经用谷歌搜索了,无法终生弄清楚我应该做的事情。 (VLC有一个可以使用的HTTP接口,但它不如ssh方便。) 当我尝试从cron作业运行此问题时,也会出现相同的问题。
81 ssh  x11  cron 

4
我如何完全使对/ dev / null /的cronjob静音?
在我的Ubuntu-Desktop和debian服务器上,我有一个需要每分钟执行一次的脚本(该脚本调用我的在线在线Browsergame的分钟记录)。 问题在于,在debian派生产品上,cron /var/log/syslog每次执行时都会记录日志。我最终看到一遍又一遍地重复执行它的消息/var/log/syslog: Nov 11 16:50:01 eclabs /USR/SBIN/CRON[31636]: (root) CMD (/usr/bin/w3m -no-cookie http://www.spacetrace.org/secret_script.php > /dev/null 2>&1) 我知道,为了抑制程序的输出,我可以将其重定向到/dev/null,例如,隐藏程序中的所有错误和警告消息,可以在crontab中创建这样的一行 * * * * * root /usr/local/sbin/mycommand.sh > /dev/null 但是我想运行一个cronjob并确保所有生成的输出或错误都通过管道传递给NULL,因此它不会在syslog中生成任何消息,也不会生成任何电子邮件 编辑: 有一种解决方案可以通过更改更改将cron日志重定向到此处建议的单独日志中/etc/syslog.conf 但是缺点是,然后所有cronjobs的ALL输出都将被重定向。 我可以以某种方式仅将单个cronjob重定向到单独的日志文件吗?最好是在cron.hourly文件本身内部可配置。


13
正确锁定外壳脚本?
有时,您必须确保同时运行一个Shell脚本实例。 例如,通过crond执行的cron作业本身并不提供锁定(例如,默认的Solaris crond)。 实施锁定的常见模式是这样的代码: #!/bin/sh LOCK=/var/tmp/mylock if [ -f $LOCK ]; then # 'test' -> race begin echo Job is already running\! exit 6 fi touch $LOCK # 'set' -> race end # do some work rm $LOCK 当然,这样的代码具有竞争条件。在一个时间窗口中,两个实例的执行都可以在第3行之后在一个实例能够触摸$LOCK文件之前进行。 对于cron作业,这通常不是问题,因为两次调用之间的间隔为几分钟。 但是事情可能会出错(例如,当锁文件位于NFS服务器上时)会挂起。在这种情况下,几个cron作业可以在第3行上阻塞并排队。如果NFS服务器再次处于活动状态,那么您将听到大量并行运行的作业。 在网上搜索时,我发现了锁运行工具,这似乎是解决该问题的好方法。使用它可以运行需要锁定的脚本,如下所示: $ lockrun --lockfile=/var/tmp/mylock myscript.sh 您可以将其放入包装器中,也可以从crontab中使用它。 lockf()如果可用,它将使用(POSIX),然后回退到flock()(BSD)。并lockf()支持NFS上应该是比较普遍的。 有替代品lockrun吗? 那其他的cron守护程序呢?有普通的crond支持健全的锁定吗?快速浏览Vixie …

7
crontab的@reboot仅适用于root用户吗?
man 5 crontab 关于如何使用crontab在启动时运行脚本非常明确: These special time specification "nicknames" are supported, which replace the 5 initial time and date fields, and are prefixed by the `@` character: @reboot : Run once after reboot. 因此,我很高兴在crontab中添加了一行(在我的用户帐户下,而不是root下): @reboot /home/me/myscript.sh 但是由于某种原因,myscript.sh无法在计算机重新启动时运行。(如果我从命令行调用它,它将运行良好,因此这不是权限问题) 我想念什么? 更新以回答@Anthon的问题: Oracle-linux版本:5.8(uname:2.6.32-300.39.2.el5uek#1 SMP) Cron版本:vixie-cron-4.1-81.el5.x86_64 是的,/home 是已安装的分区。看起来这是问题所在。我该如何解决? 目前,myscript.sh仅将文本消息回显到中的文件/home/me。
64 cron  reboot 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.