当我尝试打开时,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)系统上,权限包括设置gidcrontab
(s
组的权限位):
-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}