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

これにより、crontabUbuntuユーザーには正しく開きます。

修正する:

詳細については、追加情報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)システムの権限には、次のものが含まれます。設定crontabsグループ権限ビット):

-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}

関連情報