问题
What's the preferred method to insert an entry into /etc/crontab unless it exists, preferably using a one-liner?
Here's my example entry I wish to place into /etc/crontab unless it already exists in there.
*/1 * * * * some_user python /mount/share/script.py
I'm on CentOS 6.6 and so far I have this:
if grep "*/1 * * * * some_user python /mount/share/script.py" /etc/crontab; then echo "Entry already in crontab"; else echo "*/1 * * * * some_user python /mount/share/script.py" >> /etc/crontab; fi
回答1:
You can do this:
grep 'some_user python /mount/share/script.py' /etc/crontab || echo '*/1 * * * * some_user python /mount/share/script.py' >> /etc/crontab
If the line is absent, grep
will return 1
, so the right hand side of the or ||
will be executed.
回答2:
Factoring out the filename & using the q & F options
file="/etc/crontab"; grep -qF "some_user python /mount/share/script.py" "$file" || echo "*/1 * * * * some_user python /mount/share/script.py"
回答3:
You can do it like this:
if grep "\*\/5 \* \* \* \* /usr/local/bin/test.sh" /var/spool/cron/root; then echo "Entry already in crontab"; else echo "*/5 * * * * /usr/local/bin/test.sh" >> /var/spool/cron/root; fi
Or even more terse:
grep '\*\/12 \* \* \* \* /bin/yum makecache fast' /var/spool/cron/root \
|| echo '*/12 * * * * /bin/yum makecache fast' >> /var/spool/cron/root
来源:https://stackoverflow.com/questions/27227215/insert-entry-into-crontab-unless-it-already-exists-as-one-liner-if-possible