Ubuntu 7.10 服务器 i386 时钟/日期/时间不会保持同步。我可以查看他们的日志文件来判断时钟何时发生变化吗?为了临时修复,我在 /etc/cron.hourly 中创建了一个文件:
#!/bin/sh
ntpdate time.nist.gov
Run Code Online (Sandbox Code Playgroud)
然而,这仍然会留下一个潜在的不受控制的时间。有 cron.minutely 吗?那仍然会留下潜在的一分钟不受控制的时间。我已经阅读了有关 CMOS 电池问题的信息,但是如果这不能解决问题怎么办?我希望能够将此作为完全软件问题进行故障排除。
我的鱿鱼日志显示的日期可以追溯到 2005 年,当时时钟发生了变化,而我的时间敏感访问控制出现偏差,最终允许用户在工作时间浏览被禁止的网站。
我是在彻底摧毁 Linux 机器后问这个问题的。让我给你一些背景,让你知道我来自哪里。
我目前有(嗯……确实有)一个运行 Apache 的 RedHat Linux 机器,并添加了 Phusion 乘客,用于在 Apache 下运行 Ruby 应用程序。该应用程序作为一项服务,定期向辛辛那提地区的信息亭提供缓存文件。Web 应用程序运行良好,剩下的唯一部分是设置一个 cron 任务来检索需要缓存的所有信息,并将其打包到几个不同的更新包中以提供给自助服务终端。为了实现这一点,我编写了一个 Ruby 脚本来处理数据的获取和打包。为了设置 cron 任务,我只使用了内置的 crontab。脚本如下所示:
#!/bin/bash
cd ../lib
ruby pdf_cache.rb
ruby pdf_prepare.rb
ruby rss_cache.rb
ruby nightly-pack.rb
cd ..
chown -R www.www *
Run Code Online (Sandbox Code Playgroud)
该脚本位于 cron 文件夹中,目录结构如下所示:
.
|-- cron
|-- feeds
|-- lib
| `-- trash
|-- logs
|-- nightly-packs
|-- pdf
| `-- tank
|-- public
`-- tmp
Run Code Online (Sandbox Code Playgroud)
我crontab -e按照root以下内容运行:
0 3 * * * /usr/local/apache2/ruby_projects/kiosk/cron/schedule_job
Run Code Online (Sandbox Code Playgroud)
应该每天凌晨 3 …
我在的crontab的职位列表user1,user2。我想阻止user2运行的作业。
我试着列出user2在cron.deny访问他,但这只能使他crontab。在列出的职位user2的crontab仍得到执行。
如何为特定用户禁用 cron 作业?
我安装sSMTP用于从命令行发送电子邮件。
我想创建一些别名cron jobs:
$ sudo vim /etc/aliases
# append this line at the end
myname: root
$ newaliases
newaliases: Aliases are not used in sSMTP
Run Code Online (Sandbox Code Playgroud)
所以我不能再用/etc/aliases了。
我注意到有一个/etc/ssmtp/revaliases配置文件。
有什么用?它是一个aliases文件sSMTP吗?
我正在我的 Raspberry Pi 上运行这个简单的脚本来自动更新,这样我就可以忘记它了。它还保留一个日志,说明更新是否成功。脚本是update.sh:
#!/bin/bash
echo "Update starts on: $(date)" >> /home/pi/update.log
if apt-get update && apt-get upgrade -y; then
echo "update successful $(date)" >> /home/pi/update.log
else
echo "Couldn't update $(date)" >> /home/pi/update.log
fi
Run Code Online (Sandbox Code Playgroud)
我通过使用将此脚本添加到根 crontabsudo crontab -e并将 cronjob 设置为每天早上 6 点运行
0 6 * * * /home/pi/update.sh
Run Code Online (Sandbox Code Playgroud)
我知道它在某种程度上有效,因为sudo ./update.sh在 shell 中运行手动运行命令并在日志中留下“成功”条目。另一方面,当从 crontab 运行时,我总是得到“无法更新”条目。万一重要,“update.sh”脚本是由“pi”用户创建的,我从未更改过权限,除了给它执行权限。
我读了另一个关于同一问题的问题,那个人通过sudo在命令前面放了一个来解决它。他承认这很奇怪,因为它已经被 root 执行了,但说它有效。我尝试添加sudo并验证它现在确实有效。
有谁知道为什么会这样?sudo如果它已经是root,为什么还需要它?
我正在尝试在 crontab 中的变量中使用变量:
AUTH=user:password
BASE_URL=http://...
COMMAND_OLDB=curl -u $AUTH $BASE_URL/openligadb >> /var/log/cron.openligadb.log
Run Code Online (Sandbox Code Playgroud)
但刚刚收到一封邮件/var/mail/root:
X-Cron-Env: <BASE_URL=http://...>
X-Cron-Env: <AUTH=user:password>
X-Cron-Env: <COMMAND_OLDB=curl -u $AUTH $BASE_URL/openligadb >> /var/log/cron.openligadb.log>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
Message-Id: <...>
Date: Mon, 9 Feb 2015 20:10:01 +0100 (CET)
Enter host password for user '$AUTH':
curl: (6) Couldn't resolve host '$BASE_URL'
curl: (6) Couldn't resolve host '>>'
curl: (3) <url> malformed
Run Code Online (Sandbox Code Playgroud)
/var/log/cron.openligadb.log本身是空的。
$AUTH以及$BASE_URL不会得到解决$COMMAND_OLDB。为什么以及如何解决?
每隔一小时(从“现在”开始),我就可以使用 nodejs cron-job 使用此 cron 表达式(表达式)进行调度。
但是我需要从特定时间开始每隔一小时设置一次 cron。例如,假设它从凌晨 3:30 开始——我们可以这样做吗?这将是什么 cron 表达式?任何想法表示赞赏
我创建了一个运行 shell 脚本的 cron 作业。我希望 shell 脚本运行并捕获它的输出,并在完成后通过电子邮件发送。到目前为止,这是我所拥有的,但邮件正文是空的。
我已经尝试了以下所有方法:
/root/myscript.sh | tee output.txt | mail -s "Email subject" me@mymail.com
/root/myscript.sh | tee output.txt | mail -s "Email subject" me@mymail.com &> /dev/null
/root/myscript.sh | tee output.txt && mail -s "Email subject" me@mymail.com < output.txt &> /dev/null
/root/myscript.sh > tee output.txt && mail -s "Email subject" me@mymail.com < output.txt &> /dev/null
Run Code Online (Sandbox Code Playgroud)
所有这些都正常运行,但它们会产生一封空正文的电子邮件。运行脚本确实会在 stdout 上产生输出。
没有为非交互式/非登录 shell 调用 rc 文件;例如,那些由cron运行的
(我不确定这一点,并且会依靠社区的专业知识)
非交互式shell 需要设置BASH_ENV环境变量,这样才能将其设置为特定的 rc 文件(例如,BASH_ENV=$HOME/.bash_profile)
我不确定是否有过多的 rc 文件可用,所以很好奇是否有我不熟悉的文件。希望找到一个满足以下条件的rc文件:
我在亚马逊 ec2 机器(Ubuntu 16.04)上有一个 cron 作业,该作业应该在中部时间凌晨 2:00 运行。
cron 作业是使用 UTC 时间安排的。由于中部时间目前是 UTC-5(我们目前处于夏令时),因此它看起来像这样:
0 7 * * * /home/ubuntu/runetl.sh
Run Code Online (Sandbox Code Playgroud)
因此它在 UTC 上午 7:00 运行,这是正确的。
但当我们回到标准时间时,中部时间将更改为 UTC-6,因此作业将在中部时间凌晨 1:00 开始运行。那不是我想要的。我希望它们始终在凌晨 2:00 运行,无论是白天还是标准时间。
我怎样才能做到这一点?