Wo ist der Benutzer crontab gespeichert?

249

Seit dem Upgrade wurde die Crontab meines Benutzers gelöscht. Dies ist nicht das erste Mal in diesem Jahr und es ist ein Schmerz, der es jedes Mal wieder herstellt.

Ich möchte in der Lage sein, die Crontab für meinen Benutzer zu sichern, aber dafür muss ich wissen, wo sie gespeichert ist.

Oli
quelle
4
Es wäre schön, wenn jemand auch einen Grund nennen könnte, warum er ausgelöscht wurde
Walter Tross,
1
@WalterTross Ja, das ist ziemlich nervig. Ich denke, es ist ein Nebeneffekt der Aktualisierung des cronPakets, aber ich stimme zu - es ist nicht etwas, was passieren sollte.
Oli
Äh, ich weiß nicht, dass Benutzer-Crons pro Cron-Paket-Upgrade gelöscht werden!
28.
@pl1nk Ich habe keine Ahnung, was es auslöscht, aber es passiert immer wieder. Geist in der Maschine, denke ich.
Oli
Benutzertabellen werden in einem temporären Bereich / var / spool / cron / crontabs / $ USER gespeichert, da sie möglicherweise beim nächsten Start oder Upgrade gelöscht werden.
fcm

Antworten:

325

Eigentlich ist es nicht empfehlenswert, diese Dateien von Hand zu bearbeiten. Pro crontabManpage:

Jeder Benutzer kann eine eigene Crontab haben, und obwohl
dies Dateien sind /var/spool/cron/crontabs, sind sie nicht dafür
vorgesehen, direkt bearbeitet zu werden.

Dateien unter /var/spoolwerden als temporär / funktionsfähig betrachtet. Aus diesem Grund werden sie wahrscheinlich während eines Upgrades gelöscht. Ein genauerer Blick auf die cronUpgradeskripte des Pakets kann jedoch Aufschluss darüber geben.

Wie auch immer, es ist immer ratsam, Ihre Cron-Einträge zu sichern oder sie in einer Datei in Ihrem Home-Verzeichnis zu speichern.

Ich crontab -egehe davon aus , dass Sie Crontab-Dateien im laufenden Betrieb erstellen. Wenn ja, können Sie auf diese Weise eine "Kopie" Ihrer crontab-Datei erhalten crontab -l. Kopieren Sie das in eine Datei, um ein "Backup" zu erhalten:

crontab -l > my-crontab

Dann können Sie diese my-crontab-Datei bearbeiten, um Einträge hinzuzufügen oder zu ändern, und sie dann "installieren", indem Sie sie crontab geben:

crontab my-crontab

Dies führt die gleiche Syntaxprüfung durch wie crontab -e.

Roadmr
quelle
7
crontab -list einfacher als das Durchgehen, /var/spool/cron/crontabs/$USERhauptsächlich wegen der bizarren Berechtigungen für diese Datei.
Oli
1
Die iptables-savevon Cron. Schön ...
Parthian Shot
4
Vielleicht sollten wir eine Crontab setzen, um sich automatisch zu sichern> :)?
PascalVKooten
4
Durchstöbern /var/spool/cron/crontabsist praktisch, wenn Sie Crontabs von mehreren Benutzern kuratieren oder untersuchen möchten.
Dhasenan
1
Wenn Geheimnisse auf einem Server zu untersuchen sind Sie nicht kennen, ist es üblich, sudo grep -rHin "$string" /etc/cron*(wo Zeichenfolge könnte ein Befehl wie sein docker, lftp, iptables, etc. Es ist eine gute Idee , auch Benutzer crontabs überprüfen Das ist , was zu diesem Q & A führte mich..sudo grep -rHin "$string" /etc/cron* /var/spool/cron*
Bruno Bronosky
50

Es befindet sich im /var/spool/cron/crontabsOrdner unter dem Benutzernamen.

Manula Waidyanatha
quelle
30

Ich habe endlich herausgefunden, warum meine Crontabs und Postfix-Installation nach dem Booten immer wieder kaputt gingen. Es ist ein wirklich dummer Grund, aber ...

Ich hatte /var/spoolals tmpfsRAM-Laufwerk gemountet .

Klingt idiotisch und ist es auch, aber ich war einem der alten SSD-Tweaks gefolgt, um die Lebensdauer meiner SSD zu verlängern. So, ich blind montiert Dabei /tmp, /var/tmpund /var/spoolso , tmpfsohne denken von den Auswirkungen. Ich dachte, /var/spooles wäre so /proc/oder so /run/und es wäre nur für die Dauer der Sitzung nützlich. Ich habe mich eindeutig geirrt.

Oli
quelle
8
Es sollte sicher sein, /tmpals tmpfs zu mounten , aber nicht /var/tmpoder /var/spool. /tmpwird für temporären Speicher verwendet, der beim Neustart verloren gehen kann. /var/tmpwird für den temporären Speicher verwendet, der nach einem Neustart erhalten bleibt. Und wie Sie festgestellt haben, müssen /var/spoolDaten verarbeitet werden, die auch nach einem Neustart erhalten bleiben.
Thomasrutter
2
Siehe pathname.com/fhs/2.2/fhs-5.15.html
thomasrutter
2
Beachten Sie auch, dass die Anzahl der Schreibvorgänge bei modernen SSDs kein Problem mehr darstellt.
Thomasrutter
17

So listen Sie alle Cron-Jobs aller Benutzer in Ihrem System auf:

for user in $(cut -f1 -d: /etc/passwd)
do
  echo $user
  crontab -u $user -l
done

Eine Alternative zu Ihrem Problem wäre, sie in den Ordner cron.d zu legen und den entsprechenden Benutzer pro cron wie im Beispiel anzugeben:

00 01 * * * user /home/user/user-script.sh
pl1nk
quelle
Wenn Sie die Crontab von einem anderen Laufwerk wiederherstellen, funktioniert dies nicht, da crontab -usie auf Ihrem aktuellen System ausgeführt wird.
JVE999
Ich nehme an, dass dies ein Einzeiler ist, der weniger als 80 Zeichen fasst und einigermaßen lesbar ist, aber ich mag es im Allgemeinen, Code in einem Format abzulegen, sodass eine Person ihn entweder kopieren oder in ein Skript einfügen kann (und In einem Skript wäre dies keine einzige Codezeile. Vorgeschlagene Bearbeitung ...
Parthian Shot
Ich wollte es auch in eine while read userSchleife verwandeln , um den Fall zu behandeln, in dem der Benutzername Leerzeichen enthält, aber anscheinend ist das kein Problem. Sehr begrenzte Anzahl von Benutzernamen.
Parthian Shot