简体   繁体   English

echo $(date +%s -d "+1 day 6:30") 使用 sudo crontab -e [重复]

echo $(date +%s -d "+1 day 6:30") using sudo crontab -e [duplicate]

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文简体   中文繁体   英文版本 版本,有任何建议请联系yoyou2525@163.com。

Main-agenda: I am trying to automate shutdown and restart of my computer using cron .主要议程:我正在尝试使用cron自动关闭和重新启动计算机。 To be exact, I want to shutdown my computer at 10:30 pm and restart my computer at 06:00 am everyday.确切地说,我想在每天晚上 10:30 关闭我的电脑,并在每天早上 06:00 重新启动我的电脑。

Progress so far:目前进展:

  1. I can automate shutdown.我可以自动关机。 (I don't even use cron . I just use sleep $duration; poweroff . And duration is computed as target time minus current time). (我什至不使用cron 。我只使用sleep $duration; poweroffduration计算为目标时间减去当前时间)。

  2. For automating restart I am following this askubuntu answer .为了自动重启,我正在关注这个 askubuntu 答案 I could successfully run the "Simple test to wake the machine 5 minutes from now".我可以成功运行“从现在起 5 分钟唤醒机器的简单测试”。 It works fine!它工作正常!

  3. Now comes the part where I try to figure out: how to use cron .现在是我试图弄清楚的部分:如何使用cron So I basically want to run something like this everyday:所以我基本上想每天运行这样的东西:

    sudo sh -c "echo $(date +%s -d '+1 day 6:30') > /sys/class/rtc/rtc0/wakealarm"

    (Remark: standalone, the above works fine). (备注:独立,以上工作正常)。

  4. So I try this: sudo crontab -e and added the following line there:所以我试试这个: sudo crontab -e并在那里添加了以下行:

    */1 * * * * echo "$(date +%s -d '+1 day 6:30')" > /sys/class/rtc/rtc0/wakealarm

    Remark: I am using */1 * * * * for testing purposes only.备注:我使用*/1 * * * *仅用于测试目的。 Finally when everything works I plan to use @reboot .最后,当一切正常时,我计划使用@reboot

  5. The above doesn't work.以上不起作用。 So I have tried looking online and debugging.所以我尝试在网上查找和调试。 From this unix.stackexchange answer I get the idea that "by default cron is using sh to run the task instead of bash ".这个 unix.stackexchange 答案中,我了解到“默认情况下, cron使用sh来运行任务而不是bash ”。 So I added SHELL=/bin/bash in the sudo crontab -e file.所以我在sudo crontab -e文件中添加了SHELL=/bin/bash

  6. Next I have broken the above echo into simpler things and now, I know some of them work and some of them don't.接下来,我将上述echo分解为更简单的东西,现在,我知道其中一些有效,而另一些则无效。

Currently, the output of sudo crontab -l is:目前, sudo crontab -l的 output 是:

SHELL=/bin/bash
*/1 * * * * echo "$(date)" > /home/username/a.txt
*/1 * * * * echo "1659800001" > /sys/class/rtc/rtc0/wakealarm
*/1 * * * * echo "$(date +%s)" > /home/username/b.txt
*/1 * * * * echo "$(date +%s -d '+1 day 6:30')" > /sys/class/rtc/rtc0/wakealarm

Of these - the first 2 commands execute correctly.其中 - 前 2 个命令正确执行。 However the 3rd and 4th commands don't execute.但是,第 3 和第 4 个命令不执行。 4th command is what I want to work.第四个命令是我想要工作的。

So my guess is that $(date +%s) is the problem?所以我的猜测是$(date +%s)是问题所在? Please help me proceed from here!请帮助我从这里开始!

1 个回复

Your intuition about the % is correct.您对 % 的直觉是正确的。 See man 5 crontab :man 5 crontab

A "%" character in the command, unless escaped with a backslash (), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.命令中的“%”字符,除非用反斜杠 () 转义,否则将更改为换行符,第一个 % 之后的所有数据将作为标准输入发送到命令。

This will work with the % escaped:这将与 % 转义一起使用:

*/1 * * * * echo "$(date +\%s -d '+1 day 6:30')" > /sys/class/rtc/rtc0/wakealarm

However, I wonder why you want to do the echo?但是,我想知道你为什么要做回声? This will also work:这也将起作用:

*/1 * * * * date +\%s -d '+1 day 6:30' > /sys/class/rtc/rtc0/wakealarm

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题
 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM