[Chicago-talk] Determining if another perl process is running.
Steven Lembark
lembark at wrkhors.com
Thu Feb 6 11:18:10 PST 2025
On November 25, 2024 10:54:06 AM EST, Alan Mead <amead2 at alanmead.org> wrote:
>I like Andy's PID file suggestion, but I would be inclined to make this a bash script rather than a perl one-liner and test something like:
>
>`ps aux | grep perl | grep starman`
>
>
>And if that command causes it's own failure (by always creating a process with 'perl' and 'starman') then:
>
>`ps aux | grep [p]erl | grep [s]tarman`
>
>
>If you find bash scripting not super easy (like me), ChatGPT is very helpful. It's helped me a lot in writing better admin scripts.
>
>
>-Alan
>
>
>On 11/25/24 9:41 AM, Andy Bach wrote:
>> Need to expand your grep RE or add a grep -v to remove the ones you don't want, though, then you have to remove the one you just added. Another is to track the pids, find the ones you've created and look for one outside that set. You could have starman (if it doesn't) create a .pid file and use that to check that pid's status (with lsof -p <pid> maybe), rather than grepping.
>> ------------------------------------------------------------------------
>> *From:* Chicago-talk <chicago-talk-bounces+andy_bach=wiwb.uscourts.gov at pm.org> on behalf of Richard Reina <gatorreina at gmail.com>
>> *Sent:* Sunday, November 24, 2024 5:19 PM
>> *To:* Chicago.pm chatter <chicago-talk at pm.org>
>> *Subject:* [Chicago-talk] Determining if another perl process is running.
>> *CAUTION - EXTERNAL:
>> *
>>
>>
>> Hello everyone,
>>
>> So excited about the Winter Perl Conference that I just registered for that I thought I would rebuild my aged Perl Dancer2 website. I 've done so and deployed it on a Digital Ocean droplet but I've hit a snag in setting up a cron job to make sure starman is running. It seems my query into whether the process is running gets treated as evidence that the process IS running.
>>
>> When I do:
>>
>> perl -e 'my $smstat = `ps -ef | grep starman`; unless ($smstat =~ /starman master/) { system("XDG_RUNTIME_DIR=/run/user/1001 exec /home/starman/starman.pl <http://starman.pl> start &>> /home/starman/starman.log"); print localtime . " starting starman\n"; } else { print "Starman is already running\n\n\n $smstat\n" }';
>>
>> RESULTS IN:
>>
>> Starman is already running
>>
>>
>> starman 203805 1 0 Nov08 ? 00:00:00 /lib/systemd/systemd --user
>> starman 203806 203805 0 Nov08 ? 00:00:00 (sd-pam)
>> root 472040 385 0 Nov20 ? 00:00:00 sshd: starman [priv]
>> starman 472049 472040 0 Nov20 ? 00:00:01 sshd: starman at pts/0
>> starman 472050 472049 0 Nov20 pts/0 00:00:00 -bash
>> starman 544383 472050 0 23:11 pts/0 00:00:00 perl -e my $smstat = `ps -ef | grep starman`; unless ($smstat =~ /starman master/) { system("XDG_RUNTIME_DIR=/run/user/1001 exec /home/starman/starman.pl <http://starman.pl> start &>> /home/starman/starman.log"); print localtime . " starting starman\n"; } else { print "Starman is already running\n\n\n $smstat\n" }
>> starman 544384 544383 0 23:11 pts/0 00:00:00 sh -c ps -ef | grep starman
>> starman 544385 544384 0 23:11 pts/0 00:00:00 ps -ef
>> starman 544386 544384 0 23:11 pts/0 00:00:00 grep starman
>>
>> It always says it's running even if it is not apparently because it's seeing 'starman master/ in the perl script that is inquiring.
>>
>> Anyone know a good solution to avoid this so that I can determine whether my starman startup script is indeed running?
>>
>> *CAUTION - EXTERNAL EMAIL:* This email originated outside the Judiciary. Exercise caution when opening attachments or clicking on links.
>>
>>
>>
>> _______________________________________________
>> Chicago-talk mailing list
>> Chicago-talk at pm.org
>> https://mail.pm.org/mailman/listinfo/chicago-talk
>
PID files have one annoying shortfall: unlinking the file leaves you unprotected.
pgrep makes it simple enough to scan for a running proc by path and args, e.g.
pgrep -f 'starman.*master,*8080';
and saves you from dealing with stale files, accidental unlinks, etc.
--
Steven Lembark
888 359 3508
lembark at wrkhors.com
More information about the Chicago-talk
mailing list