後で実行するようにスケジュールされたジョブを使用した後、ジョブを開始するのではなく、指定されたat
時間にatd
「許可拒否」が報告されます。 /var/spool/cron/at* の権限が正しいです。
root@server /var/spool/cron # ls -la
total 20
drwxr-xr-x 5 root root 4096 Okt 30 2014 .
drwxr-xr-x 6 root root 4096 Okt 30 2014 ..
drwxrwx--T 2 daemon daemon 4096 Nov 1 17:57 atjobs
drwxrwx--T 2 daemon daemon 4096 Nov 1 17:57 atspool
drwx-wx--T 2 root crontab 4096 Nov 1 17:34 crontabs
手動で送信されたコマンドを実行すると、at
すべてがうまく機能します。
答え1
オペレーティングシステムの仕様を見なくてもSELinuxが動作している可能性があると思います。
有効になっていることを確認してください。がgetenforce
返されますEnforcing
。その場合は、root として実行し、setenforce permissive
コマンドの実行時に権限拒否エラーが発生することを確認します。
答え2
atd
実行理由に対する回答を探していますが、ジョブは実行されず、ログに次のものが表示されます。
Nov 16 05:28:00 yourserver atd[15038]: Cannot create output file: Permission denied
システムはDebian 10バスターです。
atd
私が気づいたことの1つは、プロセスがuserで実行されていることですdaemon
。Debian はなぜ "daemon" ユーザーとして "atd" を実行するのですか?
いいね
man atd
ファイルセクションにいくつかの有用な情報があることがわかりました。
/var/spool/cron/atjobs The directory for storing jobs; this should be mode 700, owner daemon.
/var/spool/cron/atspool The directory for storing output; this should be mode 700, owner daemon.
ディレクトリにこれらの権限と所有権があることを確認した後、すべてが期待どおりに機能し始めました。
この特定のシステムでは、at
このシステムは頻繁に使用されていないようです(それでこれまで問題は見つかりませんでした)。システムは長年にわたって以前のバージョンのDebianからアップグレードされているため、ルートからデーモンへのatd
実行を変更すると、ディレクトリが正しい(更新された)権限と所有権を受け取っていないようです。