58 votes

Opération Crontab non autorisée

J'ai la crontab suivante sur mon mac OS Catalina 10.15.1 :

* * * * * /Users/username/Desktop/cronjob.sh > /Users/username/Desktop/cronjob.log 2>&1

Le fichier de commande contient :

#!/bin/bash

touch /tmp/foo

Cependant, je me suis retrouvé avec la ligne suivante à l'intérieur cronjob.log

/bin/bash: /Users/username/Desktop/cronjob.sh: Operation not permitted

Pourquoi l'opération n'est pas autorisée alors que les permissions de cronjob.sh est réglé sur +x ?

89voto

klanomath Points 63400

Dans votre cas, vous devez ajouter cron en tant qu'application "parente" des applications/exécutions Sécurité et confidentialité > Confidentialité > Accès intégral au disque de l'utilisateur.

Selon l'endroit où lire le script et où écrire le fichier journal, vous devez ajouter cron aux applications d'accès complet au disque. Presque tous les dossiers par défaut dans la maison de l'utilisateur sont protégés (Documents/Downloads/Desktop - je n'ai pas vérifié Pictures/Movies/Music mais je pense qu'ils sont protégés aussi et évidemment les mauvais dossiers pour ajouter des shell scripts ou des fichiers journaux) par la politique système de Catalina.

Si le script et le journal résident dans des dossiers créés par l'utilisateur et donc non protégés (par exemple, le script dans ~/bin et le fichier journal dans ~/log), cela fonctionne sans ajouter cron au groupe Accès complet au disque.

Pour ajouter l'exception :

  1. cliquez sur le + bouton
  2. touchez G
  3. entrez /usr/sbin
  4. double-cliquez sur le cron fichier.

Vous pouvez vérifier ce type d'erreurs en ouvrant Console.app et en recherchant l'exécution cisaillée dans le script (ici bash ) :

error   15:19:00.369105+0100    kernel  Sandbox: bash(4556) System Policy: deny(1) file-write-data /Users/user/Desktop/test/cronjob2.log
error   15:19:00.379093+0100    kernel  Sandbox: bash(4555) System Policy: deny(1) file-read-data /Users/user/Desktop/cronjob.sh

Dans les exemples ci-dessus cron n'a pas été ajouté au groupe Accès complet au disque.

cronjob2 a été exécuté depuis un dossier non protégé ~/bin mais tente d'écrire le fichier journal dans le dossier protégé ~/Desktop/test/. Donc pas d'erreur de lecture mais une erreur d'écriture.

cronjob a été exécuté depuis un dossier protégé ~/Desktop et tente d'écrire le fichier journal dans le dossier protégé ~/Desktop/. Donc une erreur de lecture.

Il est intéressant de noter que les deux fichiers journaux sont créés - le premier (cronjob2.log) est cependant vide.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X