crontab 不为用户打开

crontab 不为用户打开

当我尝试打开时,crontab我看到下一个输出:

ubuntu@macaroon:~$ crontab -l
crontabs/ubuntu/: fopen: 权限被拒绝

但是,当我添加sudo它时,它可以正常打开,如果工作在那里不起作用:

ubuntu@macaroon:~$ sudo crontab -l
# Edit this file to introduce tasks to be run by cron.
# omitted such info
* * * * * /usr/bin/env python3 /home/ubuntu/main.py date >> ~/main_script_cronjob.log

这台机器缺少什么?如何修复此行为

其他机器可以使用常规crontab命令正常工作,无需sudo.

在这里我必须做一些解决方法:

sudo crontab -u ubuntu -e

然后它会crontab为 ubuntu 用户正确打开。

更新:

详细信息的附加信息crontab

ubuntu@macaroon:~$ ls -l /usr/bin/crontab
-rwxrwxrwx 1 root crontab 39568 Mar 23  2022 /usr/bin/crontab
ubuntu@macaroon:~$ sudo namei -l /var/spool/cron/crontabs/ubuntu
f: /var/spool/cron/crontabs/ubuntu
drwxr-xr-x root   root    /
drwxr-xr-x root   root    var
drwxr-xr-x root   root    spool
drwxr-xr-x root   root    cron
drwx-wx--T root   crontab crontabs
-rw------- ubuntu root    ubuntu

它不是 Docker 容器。它是一台物理机器。

答案1

crontab命令已失去其权限。例如,在我的(Raspbian)系统上,权限包括设置gidcrontabs组的权限位):

-rwxr-sr-x 1 root crontab 30452 Feb 22  2021 /usr/bin/crontab

ls -l /usr/bin/crontab您可以通过在有问题的系统上运行并将结果添加到您的问题来确认这一点。以下是修复缺少的 setgid 位的方法:

sudo chmod u=rwx,go=rx,g+s /usr/bin/crontab

(我更喜欢符号值:User=rwx, Group,Others=rx, Group+setgid。您同样可以使用八进制2755。)

还请记住告诉我们您是否尝试在 Docker 下运行它,因为默认情况下它通常会剥夺权限。

答案2

解决该问题:您可以使用 systemd-timer。

mkdir -p ~/.config/systemd/user

systemd服务单元文件:

cat <<EOF >  ~/.config/systemd/user/myservice.service
[Unit]
Description= description here

[Service]
Type=simple
ExecStart=/bin/bash -c '/usr/bin/python3 /home/ubuntu/main.py date >> ~/main_script_cronjob.log'

[Install]
WantedBy=default.target
EOF

编写 systemd 计时器单元文件。

cat <<EOF > ~/.config/systemd/user/myservice.timer
[Unit]
Description="Run service every 1 min"

[Timer]
OnCalendar=*-*-* *:*:00

[Install]
WantedBy=default.target
EOF

然后启用服务和计时器:

systemctl --user start myservice.{service,timer}

相关内容