我对 ubuntu 服务器还很陌生,这周我在使用 crontab 时遇到了很多问题,我真的不知道它出了什么问题,我尝试了这里看到的所有方法都无济于事。
因此,我有一个脚本,理论上应该在网络不活动几分钟后关闭服务器。该脚本执行没有任何问题,如果手动执行,效果很好。我遇到的问题发生在我尝试设置 cron 来执行此脚本时。
以下是代码
#!/bin/bash
set -o nounset -o errexit -o pipefail
MARKER_FILE="/tmp/ssh-inactivity-flag"
STATUS=$(netstat | grep ssh | grep ESTABLISHED &>/dev/null && echo active || echo inactive)
if [ "$STATUS" == "inactive" ]; then
if [ -f "$MARKER_FILE" ]; then
echo "Powering off due to ssh inactivity."
rm --force "$MARKER_FILE"
/sbin/poweroff # See https://unix.stackexchange.com/a/196014/56711
else
# Create a marker file so that it will shut down if still inactive on the next time this script runs.
echo "El cabron aun no se ha ido :("
touch "$MARKER_FILE"
fi
else
# Delete marker file if it exists
rm --force "$MARKER_FILE"
echo "No se va el pussi"
fi
这是 crontab 设置:
*/1 * * * * root /home/angel/idle.sh
以下是它在 /var/log/syslog 上返回的内容
Jun 29 13:37:01 torreon CRON[1951]: (angel) CMD (root /home/angel/idle.sh)
理论上 cron 正在执行脚本,但它似乎不起作用或返回任何内容。我真的迷茫了,我不知道我可能做错了什么,所以如果有人能指导我,我将不胜感激。
(我也尝试过其他就像一行代码一样的脚本,但它们也不起作用。)
答案1
CMD (root /home/angel/idle.sh)
表明 CRON 将其识别root
为命令的一部分并尝试执行它,通常会失败...这里不支持在用户中指定用户crontab
,因此请删除用户部分,即root
。
命令crontab -e
(没有sudo
) 编辑调用用户的crontab
。
如果您需要以提升的权限执行脚本,则添加它将sudo crontab -e
编辑root
用户crontab
。
每个用户都有自己的 crontab,并且任何给定 crontab 中的命令都将以拥有该 crontab 的用户的身份执行。
和:
下面列出了常规系统范围文件的内容
crontab
。 不同于 用户的crontab
,此文件具有用户名字段,如 所用/etc/crontab
。