34 pointsby bigattichouse3 days ago4 comments
  • sluongng2 days ago
    • yjftsjthsd-h2 days ago
      Nit: Probably https://man7.org/linux/man-pages/man1/flock.1.html (shell command, not the underlying libc function)
      • anitil2 days ago
        This was my first thought and I suppose flock(1) could be used to recreate a lot of this. But it does come with some other quality-of-life improvements like being able to list all currently-used locks, having a lock holdable by N processes etc.
    • Zacru2 days ago
      Because that's a syscall ;) https://man7.org/linux/man-pages/man1/flock.1.html is the command line manual.

      I would say one good reason is that

        waitlock myapp &
        JOB_PID=$!
        # ... do exclusive work ...
        kill $JOB_PID
      
      is a lot easier to use and remember than

        (; flock -n 9 || exit 1; # ... commands executed under lock ...; ) 9>/var/lock/mylockfile
      • yjftsjthsd-h2 days ago
        Why

          (; flock -n 9
        
        and not

          ( flock -n 9
        
        ?
        • apopapo2 days ago
          It's a "for" loop.
          • marklgr2 days ago
            Could you elaborate?
            • apopapo2 days ago
              A for loop in a shell script may sometimes look like this:

              `for ((i = 0 ; i < max ; i++ )); do echo "$i"; done`

              Here this is essentially a "while" loop, meaning it will keep executing the commands as long as we don't reach `exit 1`.

              (; flock -n 9 || exit 1; # ... commands executed under lock ...; )

              • yjftsjthsd-h14 hours ago
                It doesn't seem to work?

                  [~] 0 $ ( flock -n 9 || exit 1; echo in loop ; sleep 3 ; echo done working ; ) 9>~/tmp/mylock
                  in loop
                  done working
                  [~] 0 $ (; flock -n 9 || exit 1; echo in loop ; sleep 3 ; echo done working ; ) 9>~/tmp/mylock
                  -bash: syntax error near unexpected token `;'
                  [~] 2 $
                
                
                (This is bash)
      • permalac2 days ago
        Flock can be used in a single line for example for cronjobs.

        Flock -s file && script.

        Pretty simple. (I forgot the argument, I think is -s..

      • bigattichouse2 days ago
        just pushed a change so now it's:

        waitlock myapp & #... do stuff waitlock --done myapp

    • ethan_smith2 days ago
      flock is indeed built-in: `flock -xn /tmp/mylock.lock -c "echo running locked command"` does mutex locking in bash. Your tool might offer better ergonomics or features beyond flock's capabilities?
  • forrestthewoods2 days ago
    I don’t know the exact threshold at which you should use a real programming language instead of a bash script. But this type of work definitely exceeds it.
    • anitil2 days ago
      While in general I'd agree, this isn't necessarily just for bash scripts. It could just wrap the execution of another program allowing higher-level logic to handle concurrency and the low-level program to do it's one-at-a-time job
    • bigattichouse2 days ago
      Sometimes you have a cron job that takes longer than it should (but inconsistently so), and another cron job that clobbers what that cron job is doing.
  • asddfgg552 days ago
    Useful project, I love all things terminal, so I also enjoyed your project.
    • eddythompson802 days ago
      You enjoyed the project because you love the terminal?
      • bigattichouse2 days ago
        Good enough for me. I created the project because I love terminal, and wanted to make something using Claude (to learn how this tool works, strictly for personal enrichment) that solves a small problem I had with some overlapping cron job management.
        • eddythompson802 days ago
          I was saying that in a questioning tone implying that I think the account is a bot.
    • 2 days ago
      undefined