There are two ways of editing one's
crontab -e, which will open the
crontab in the editor specified by
crontab crontab.txt, which will simply import the
crontab entries from the file
crontab.txt, replacing the existing active crontab for the current user.
The issue that you have is that you are simply using the
crontab command wrong.
The following concerns non-interactive crontab manipulation:
So, to remove particular tasks programmatically, you could do something like
$ crontab -l | grep -v 'PATTERN' >crontab.txt && crontab crontab.txt
PATTERN is a regular expression that will match the task(s) that you'd like to remove. Here,
crontab -l will give you your current
Or, if you have entries in a file called
crontab-fragment.txt that you want to remove from the active crontab,
$ crontab -l | grep -v -Fx -f crontab-fragment.txt >crontab.txt && crontab crontab.txt
This reads the current crontab and filters out (removes) any line that also occurs in the file
crontab-fragment.txt in the current directory (using a full line string comparison). The result is saved to
crontab.txt and then loaded from there to replace the current crontab.
To add one or several task, do something like
$ crontab -l | cat - crontab-fragment.txt >crontab.txt && crontab crontab.txt
This is assuming that the file
crontab-fragment.txt contains the entries that you would like to add. It reads the current crontab, appends the entries from
crontab-fragment.txt to this and creates
crontab.txt file then replaces the current crontab.