開こうとすると、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)システムの権限には、次のものが含まれます。設定crontab
(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。8進数も使用できます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
システムタイマー単位ファイルを作成します。
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}