Cronjob run program only if other programm is already running












1















how do i run a cronjob only when another service is already up running and while the programm itself is not already running? It is important that programm2 starts only after programm1 is already up.



*/2 * * * * check if programm1 one is running ; check if programm2 is not running ; /etc/init.d programm2 start










share|improve this question







New contributor




La Fleur is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 4





    Services that depend on other services... sounds like a task for systemd.

    – danzel
    yesterday
















1















how do i run a cronjob only when another service is already up running and while the programm itself is not already running? It is important that programm2 starts only after programm1 is already up.



*/2 * * * * check if programm1 one is running ; check if programm2 is not running ; /etc/init.d programm2 start










share|improve this question







New contributor




La Fleur is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 4





    Services that depend on other services... sounds like a task for systemd.

    – danzel
    yesterday














1












1








1








how do i run a cronjob only when another service is already up running and while the programm itself is not already running? It is important that programm2 starts only after programm1 is already up.



*/2 * * * * check if programm1 one is running ; check if programm2 is not running ; /etc/init.d programm2 start










share|improve this question







New contributor




La Fleur is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












how do i run a cronjob only when another service is already up running and while the programm itself is not already running? It is important that programm2 starts only after programm1 is already up.



*/2 * * * * check if programm1 one is running ; check if programm2 is not running ; /etc/init.d programm2 start







cron






share|improve this question







New contributor




La Fleur is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question







New contributor




La Fleur is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question






New contributor




La Fleur is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked yesterday









La FleurLa Fleur

61




61




New contributor




La Fleur is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





La Fleur is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






La Fleur is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 4





    Services that depend on other services... sounds like a task for systemd.

    – danzel
    yesterday














  • 4





    Services that depend on other services... sounds like a task for systemd.

    – danzel
    yesterday








4




4





Services that depend on other services... sounds like a task for systemd.

– danzel
yesterday





Services that depend on other services... sounds like a task for systemd.

– danzel
yesterday










1 Answer
1






active

oldest

votes


















1














You could write a script using the $? variable. This variable contains the exit status of the last program; so if you run systemctl status dnsmasq and it's active, running echo $? will return 0 which means true. If it's not active, $? will return a non-0 answer, which means false.



A simple script to achieve this function would be:



#/!bin/bash
x=1
while [ "$x" != "0" ]
do
systemctl status (service to monitor)
if [ "$?" = "0" ]
then
systemctl start (service to start)
break
else
sleep 30
continue
fi
done


Line 1 = sets a variable to non-zero so a loop can be run from it



Line 2 = starts a loop that runs continuously (x can never = 0)



Line 4 = checks if a service is running, which sets $? to a zero or non-zero
value



Line 5 onward = checks if the exit status of the last command (checking if the service is running) was true or false. if it's true (zero), it starts the next service and breaks out of the loop. If it's false (non-zero) it returns to the start of the loop and runs until the selected service is running.



You could either run this script at startup or turn it into a service of its own.



You would need to run it as root, whichever your choice, since you're starting/stopping system services.






share|improve this answer





















  • 1





    You are re-implementing the systemd attributes Requires= and/or BindsTo= and/or After=. Also, the while loop will probably make the CPU fans blow because it re-runs systemctl without any pause.

    – PerlDuck
    yesterday








  • 1





    @perlduck added a 30 second sleep in the else statement to address the inefficiency of running the script continuously. In regards to the former, the asker wanted a cronjob so I figured a simple script would be the most flexible solution, though not the most efficient. Thanks for the pointers.

    – Minty
    yesterday











  • @Minty if this script is called by the cronjob mentioned by the asker, wouldn't this queue a new instance of your script every 5 minutes if the service it is waiting for is not running? If you're already using systemd, you might as well use systemd timer instead of cron and the mechanisms mentioned by PerlDuck for a pure systemd solution.

    – danzel
    21 hours ago











Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "89"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});






La Fleur is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1115237%2fcronjob-run-program-only-if-other-programm-is-already-running%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














You could write a script using the $? variable. This variable contains the exit status of the last program; so if you run systemctl status dnsmasq and it's active, running echo $? will return 0 which means true. If it's not active, $? will return a non-0 answer, which means false.



A simple script to achieve this function would be:



#/!bin/bash
x=1
while [ "$x" != "0" ]
do
systemctl status (service to monitor)
if [ "$?" = "0" ]
then
systemctl start (service to start)
break
else
sleep 30
continue
fi
done


Line 1 = sets a variable to non-zero so a loop can be run from it



Line 2 = starts a loop that runs continuously (x can never = 0)



Line 4 = checks if a service is running, which sets $? to a zero or non-zero
value



Line 5 onward = checks if the exit status of the last command (checking if the service is running) was true or false. if it's true (zero), it starts the next service and breaks out of the loop. If it's false (non-zero) it returns to the start of the loop and runs until the selected service is running.



You could either run this script at startup or turn it into a service of its own.



You would need to run it as root, whichever your choice, since you're starting/stopping system services.






share|improve this answer





















  • 1





    You are re-implementing the systemd attributes Requires= and/or BindsTo= and/or After=. Also, the while loop will probably make the CPU fans blow because it re-runs systemctl without any pause.

    – PerlDuck
    yesterday








  • 1





    @perlduck added a 30 second sleep in the else statement to address the inefficiency of running the script continuously. In regards to the former, the asker wanted a cronjob so I figured a simple script would be the most flexible solution, though not the most efficient. Thanks for the pointers.

    – Minty
    yesterday











  • @Minty if this script is called by the cronjob mentioned by the asker, wouldn't this queue a new instance of your script every 5 minutes if the service it is waiting for is not running? If you're already using systemd, you might as well use systemd timer instead of cron and the mechanisms mentioned by PerlDuck for a pure systemd solution.

    – danzel
    21 hours ago
















1














You could write a script using the $? variable. This variable contains the exit status of the last program; so if you run systemctl status dnsmasq and it's active, running echo $? will return 0 which means true. If it's not active, $? will return a non-0 answer, which means false.



A simple script to achieve this function would be:



#/!bin/bash
x=1
while [ "$x" != "0" ]
do
systemctl status (service to monitor)
if [ "$?" = "0" ]
then
systemctl start (service to start)
break
else
sleep 30
continue
fi
done


Line 1 = sets a variable to non-zero so a loop can be run from it



Line 2 = starts a loop that runs continuously (x can never = 0)



Line 4 = checks if a service is running, which sets $? to a zero or non-zero
value



Line 5 onward = checks if the exit status of the last command (checking if the service is running) was true or false. if it's true (zero), it starts the next service and breaks out of the loop. If it's false (non-zero) it returns to the start of the loop and runs until the selected service is running.



You could either run this script at startup or turn it into a service of its own.



You would need to run it as root, whichever your choice, since you're starting/stopping system services.






share|improve this answer





















  • 1





    You are re-implementing the systemd attributes Requires= and/or BindsTo= and/or After=. Also, the while loop will probably make the CPU fans blow because it re-runs systemctl without any pause.

    – PerlDuck
    yesterday








  • 1





    @perlduck added a 30 second sleep in the else statement to address the inefficiency of running the script continuously. In regards to the former, the asker wanted a cronjob so I figured a simple script would be the most flexible solution, though not the most efficient. Thanks for the pointers.

    – Minty
    yesterday











  • @Minty if this script is called by the cronjob mentioned by the asker, wouldn't this queue a new instance of your script every 5 minutes if the service it is waiting for is not running? If you're already using systemd, you might as well use systemd timer instead of cron and the mechanisms mentioned by PerlDuck for a pure systemd solution.

    – danzel
    21 hours ago














1












1








1







You could write a script using the $? variable. This variable contains the exit status of the last program; so if you run systemctl status dnsmasq and it's active, running echo $? will return 0 which means true. If it's not active, $? will return a non-0 answer, which means false.



A simple script to achieve this function would be:



#/!bin/bash
x=1
while [ "$x" != "0" ]
do
systemctl status (service to monitor)
if [ "$?" = "0" ]
then
systemctl start (service to start)
break
else
sleep 30
continue
fi
done


Line 1 = sets a variable to non-zero so a loop can be run from it



Line 2 = starts a loop that runs continuously (x can never = 0)



Line 4 = checks if a service is running, which sets $? to a zero or non-zero
value



Line 5 onward = checks if the exit status of the last command (checking if the service is running) was true or false. if it's true (zero), it starts the next service and breaks out of the loop. If it's false (non-zero) it returns to the start of the loop and runs until the selected service is running.



You could either run this script at startup or turn it into a service of its own.



You would need to run it as root, whichever your choice, since you're starting/stopping system services.






share|improve this answer















You could write a script using the $? variable. This variable contains the exit status of the last program; so if you run systemctl status dnsmasq and it's active, running echo $? will return 0 which means true. If it's not active, $? will return a non-0 answer, which means false.



A simple script to achieve this function would be:



#/!bin/bash
x=1
while [ "$x" != "0" ]
do
systemctl status (service to monitor)
if [ "$?" = "0" ]
then
systemctl start (service to start)
break
else
sleep 30
continue
fi
done


Line 1 = sets a variable to non-zero so a loop can be run from it



Line 2 = starts a loop that runs continuously (x can never = 0)



Line 4 = checks if a service is running, which sets $? to a zero or non-zero
value



Line 5 onward = checks if the exit status of the last command (checking if the service is running) was true or false. if it's true (zero), it starts the next service and breaks out of the loop. If it's false (non-zero) it returns to the start of the loop and runs until the selected service is running.



You could either run this script at startup or turn it into a service of its own.



You would need to run it as root, whichever your choice, since you're starting/stopping system services.







share|improve this answer














share|improve this answer



share|improve this answer








edited yesterday

























answered yesterday









MintyMinty

34817




34817








  • 1





    You are re-implementing the systemd attributes Requires= and/or BindsTo= and/or After=. Also, the while loop will probably make the CPU fans blow because it re-runs systemctl without any pause.

    – PerlDuck
    yesterday








  • 1





    @perlduck added a 30 second sleep in the else statement to address the inefficiency of running the script continuously. In regards to the former, the asker wanted a cronjob so I figured a simple script would be the most flexible solution, though not the most efficient. Thanks for the pointers.

    – Minty
    yesterday











  • @Minty if this script is called by the cronjob mentioned by the asker, wouldn't this queue a new instance of your script every 5 minutes if the service it is waiting for is not running? If you're already using systemd, you might as well use systemd timer instead of cron and the mechanisms mentioned by PerlDuck for a pure systemd solution.

    – danzel
    21 hours ago














  • 1





    You are re-implementing the systemd attributes Requires= and/or BindsTo= and/or After=. Also, the while loop will probably make the CPU fans blow because it re-runs systemctl without any pause.

    – PerlDuck
    yesterday








  • 1





    @perlduck added a 30 second sleep in the else statement to address the inefficiency of running the script continuously. In regards to the former, the asker wanted a cronjob so I figured a simple script would be the most flexible solution, though not the most efficient. Thanks for the pointers.

    – Minty
    yesterday











  • @Minty if this script is called by the cronjob mentioned by the asker, wouldn't this queue a new instance of your script every 5 minutes if the service it is waiting for is not running? If you're already using systemd, you might as well use systemd timer instead of cron and the mechanisms mentioned by PerlDuck for a pure systemd solution.

    – danzel
    21 hours ago








1




1





You are re-implementing the systemd attributes Requires= and/or BindsTo= and/or After=. Also, the while loop will probably make the CPU fans blow because it re-runs systemctl without any pause.

– PerlDuck
yesterday







You are re-implementing the systemd attributes Requires= and/or BindsTo= and/or After=. Also, the while loop will probably make the CPU fans blow because it re-runs systemctl without any pause.

– PerlDuck
yesterday






1




1





@perlduck added a 30 second sleep in the else statement to address the inefficiency of running the script continuously. In regards to the former, the asker wanted a cronjob so I figured a simple script would be the most flexible solution, though not the most efficient. Thanks for the pointers.

– Minty
yesterday





@perlduck added a 30 second sleep in the else statement to address the inefficiency of running the script continuously. In regards to the former, the asker wanted a cronjob so I figured a simple script would be the most flexible solution, though not the most efficient. Thanks for the pointers.

– Minty
yesterday













@Minty if this script is called by the cronjob mentioned by the asker, wouldn't this queue a new instance of your script every 5 minutes if the service it is waiting for is not running? If you're already using systemd, you might as well use systemd timer instead of cron and the mechanisms mentioned by PerlDuck for a pure systemd solution.

– danzel
21 hours ago





@Minty if this script is called by the cronjob mentioned by the asker, wouldn't this queue a new instance of your script every 5 minutes if the service it is waiting for is not running? If you're already using systemd, you might as well use systemd timer instead of cron and the mechanisms mentioned by PerlDuck for a pure systemd solution.

– danzel
21 hours ago










La Fleur is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















La Fleur is a new contributor. Be nice, and check out our Code of Conduct.













La Fleur is a new contributor. Be nice, and check out our Code of Conduct.












La Fleur is a new contributor. Be nice, and check out our Code of Conduct.
















Thanks for contributing an answer to Ask Ubuntu!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1115237%2fcronjob-run-program-only-if-other-programm-is-already-running%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

How did Captain America manage to do this?

迪纳利

南乌拉尔铁路局