我有一个执行命令的 .sh。我想使用 crontab -e 并进入文件 @reboot /path/to/command。
如何在一个命令中执行此操作,而不是单独运行 crontab -e,然后手动插入行,然后保存文件。
答案1
当您使用时crontab -e
将创建一个文件,/var/spool/cron/crontabs/
其名称等于您的用户名。
因此只需将您想要的行重定向到此文件:
echo "@reboot /path/to/file.sh" | sudo tee -a /var/spool/cron/crontabs/$USER
tee -a
我们使用它tee
来附加到@reboot /path/to/file.sh
该文件的末尾而不是覆盖它。- 如果不存在,则会创建它。
答案2
可能是正确的这样做的方法 - 如上所述如何以编程方式添加新的 crontab 文件而不替换前一个文件- 是将现有的 crontab 转储到临时文件,修改它,然后将其读回。例如:
cmd='@reboot /path/to/file'
tmpfile=$(mktemp) && crontab -l > "$tmpfile"
cmd='@reboot /path/to/command'
grep -Fxq "$cmd" "$tmpfile" || echo "$cmd" >> "$tmpfile"
crontab "$tmpfile" && rm -- "$tmpfile"
如果你不介意检查的话,一个“快速而粗略”的选择是
crontab -l | sed '$a@reboot /path/to/command' | crontab -
假设 GNU sed 允许a
在一行上附加文本。
注意:与直接写入不同/var/spool/cron/crontabs
,这种方法不需要sudo
(因为crontab
是 setuid)。