Insert entry into crontab unless it already exists (as one-liner if possible) [duplicate]

若如初见. 提交于 2019-12-23 07:43:33

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!